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
原创粉丝点击