JavaScript中的方法
来源:互联网 发布:戈博贝尔求生刀淘宝 编辑:程序博客网 时间:2024/05/18 09:41
方法:
在对象中绑定函数,称为这个对象的方法。
定义方法:
//方式1function getAge(){ var y = new Date().getFullYear(); return y-this.birth;}var cjs = { name:'张三', birth:1996, age:getAge};console.log(cjs.age);//得到的是getAge()这个方法console.log(cjs.getAge);//得到的是undefine,因为cjs没有getAge这个属性console.log(age());//得到的是 21 是正确的,因为getAge赋值给了age,所以age也变成了一个函数。需要加上()才算调用//方式2var xiaoming={ name:'小明', birth:1996, age:function(){ var y=new Date().getFullYear(); return y-this.birth; }};console.log(xiaoming.age);//获得的是这个匿名函数console.log(xiaoming.age());//22,是方法执行后的值
注意了:
var fn = xiaozhang.age;//先拿到xiaozhang的age函数fn();//NaN
要保证this指向正确,必须是obj.xxx();的形式。
注意:
当方法中还包含了一个方法时,如果里面的方法用到了this,那么会出错。因为在方法内定义的方法用this,这个this在‘strict’模式下会指向undefined,而在非‘strict’模式下,会指向window对象
示例代码:
var xiaohong={ name:'小红', birth:2000, age:function(){ function getAgeFromBirth(){ var y=new Date().getFullYear(); return y-this.birth; } return getAgeFromBirth(); }};console.log(xiaohong.age());//报错,显示birth这个属性未定义。因为此时的birth前面的this指向的不是xiaohong。
怎样解决这个问题呢?
方法1:在最外层的方法中定义一个变量that,让that = this.以后再出现用this的地方就用that代替。
方法1原理:因为最外层的方法的this是指向调用者对象的,将that = this,that就始终指向调用者对象。不会指向window或者undefined。
实现代码:
var xiaozhang={ name:'小张', birth:2006, age:function(){ var that=this; function getAgeFromBirth(){ var y=new Date().getFullYear(); return y-that.birth; } return getAgeFromBirth(); }};console.log(xiaozhang.age());//21正确
方法2:直接用箭头函数来进行定义方法。
方法2原理:ES6新出的箭头函数,能够让this始终指向调用者。
示例代码:
var xiaozhang = { birth:2006, age: function () { var b = this.birth;//2006 var func = ()=>{ return new Date().getFullYear()-this.birth; } return func(); }};console.log(xiaozhang.age()); //得到11,2017-2006
总结:
1.对象中的方法,调用时需要加上()才能得到结果。2.当调用存在this的函数时,为了让this指向正确,必须用obj.xxx()的方式。 var fn = xiaozhang.age;//先拿到xiaozhang的age函数 fn();//NaN 这样是不行的3.当出现方法中嵌套方法,并用到了this时,可以用一个变量代替this,也可以用箭头函数。
0 0
- javascript 中的replace方法
- JavaScript 中的replace方法
- javascript 中的replace方法
- javascript中的replace方法
- Javascript中的Split方法
- javaScript中的ReplaceAll方法
- javaScript 数组中的方法
- Javascript中的方法
- javascript中的toString()方法
- javascript中的test方法
- JavaScript中的indexOf方法
- JavaScript中的方法重载
- Javascript中的Split方法
- javascript中的indexOf()方法
- javascript中的继承方法
- javascript中的confirm()方法
- JavaScriPt中的getAttribute()方法
- javascript中的sort()方法
- 洛谷 P1227 [JSOI2008]完美的对称
- Python :连续正数序列
- [置顶]树剖例题
- Map.vue重构笔记
- (34):使用接口模拟可伸缩的枚举
- JavaScript中的方法
- C++ STL 栈stack 向量vector 队列queue的用法
- 三种算法求一个数字序列的最长递增子序列
- 集训-变形合唱队形(DP)
- 《拳皇咆哮》Cocos2dx 横版动作手游全套源码 + 资源 + 数据库
- tableWidget用法
- 用户界面设计
- POJ3026Borg Maze(BFS+prim最小生成树)
- Linux安装Nodejs的三大方法