关于this


严格模式中使用方法重构:

'use strict';

var xiaoming = {
    name: '小明',
    birth: 1990,
    age: function () {
        function getAgeFromBirth() {
            var y = new Date().getFullYear();
            return y - this.birth;
        }
        return getAgeFromBirth();
    }
};

xiaoming.age();  
 // Uncaught TypeError: Cannot read property 'birth' of undefined
原因是 this指针只在 age方法的函数内指向 xiaoming,在函数内部定义的函数, this又指向 undefined了!(在非strict模式下,它重新指向全局对象 window!  NaN


'use strict';

var xiaoming = {
    name: '小明',
    birth: 1990,
    age: function () {
        var that = this; // 在方法内部一开始就捕获this
        function getAgeFromBirth() {
            var y = new Date().getFullYear();
            return y - that.birth; // 用that而不是this
        }
        return getAgeFromBirth();
    }
};

xiaoming.age();
我们用一个 that变量首先捕获 this



posted @ 2017-07-12 16:58  smartwange  阅读(39)  评论(0)    收藏  举报