function getAge() { var y = new Date().getFullYear(); return y - this.birth;}var xiaoming = { name: '小明', birth: 1990, age: getAge};console.log(xiaoming.age()); // 25, 正常结果console.log(getAge()); // NaN 此时this指向全局变量windows
'use strict'var xiaoming = { name: '小明', birth: 1990, age: function () { var that = this; console.log(that) function getAgeFromBirth() { var y = new Date().getFullYear() return y - this.birth; } return getAgeFromBirth() }}console.log(xiaoming.age()); //cannot read property birth of underfined//原因是this指针只在age方法的函数内指向xiaoming,在函数内部定义的函数,this又指向undefined了!(在非strict模式下,它重新指向全局对象window!) 修复的办法也不是没有,我们用一个that变量首先捕获this: