严格模式中使用方法重构:
原因是'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