var obj = {
a:4,
b:this.a+1,
f: function(){
console.log(this.a) //4
console.log(this) //{ a: 4, b: NaN, f: [Function: f] }
console.log(this.b) //NaN
console.log(a) //a is not defined
}
}
为什么在对象内部定义的函数中不使用this就取不到对象内部的属性呢,它无法根据作用域链取得a的值吗?为什么对象内部的this有时指向obj,有时指向window?能具体讲讲四个结果出现的原因吗?谢谢大神
我猜你的函数是这样调用的:
obj.f();
那么,函数调用时候,它前面有个【点】,一般情况下,点前面是谁,被调用的这个函数里面的
this
就是谁。好啦,这里【点】前面是
obj
,调用函数时候,就替换一下吧obj.fn()
=> this:obj
=> console.log(this.a) :console.log(obj.a) 找到obj上有属性a,输出:4
=> console.log(this) : console.log(obj); 输出的就是obj这个对象
=> console.log(this.b) : console.log(obj.b); 输出的是obj上的属性b的值
=> console.log(a); 根据作用域链查找:先找自己作用域下的变量a,没找到;那就去上级作用域查找,一直找到全局作用域下,都没有找到变量a:那么会报错 a is not defined
这里面 obj.b 的值是NaN ,因为给他赋值是 this.a + 1 ,要找到此处的this:全局window
好啦,替换一下吧,this.a=>window.a=>在window对象上没有找到a这个属性=>undefined
好啦,计算一下吧 undefined+1 => NaN
可以参考这个:https://segmentfault.com/a/11...