var o={
a:10,
b:{
a:12,
fn:function () {
console.log(this.a);//12
}
}
};
o.b.fn();//调用对象
我们都知道函数this的指向是调用它的对象(就近的对象)
对象 b 里面有 a 这个属性。那么当我们调用对象属性 a 的值是12而不是10;那么这个this的指向就是 b 这个对象,而不是o这个对象---------------注意点 this指向最后调用它的对象。
var o={
a:10,
b:{
//a:12,
fn:function () {
console.log(this.a);//undefined
}
}
};
o.b.fn();//调用对象
当我们注释掉 b 里面 a 的值会发现this.a的值是undefined?
因为js是一门动态类型的语言,当我们我们对象点(.)一个属性的时候那么这个属性就有了,如果没有赋值就是undefined。
通过上面我们知道不管对象里面有没有属性a,这个this的指向也是对象 b 因为this总是指向它上一级的调用它的对象。
看重点:重要重要重要
var a = 5;
var o = {
a: 10,
b: {
a: 12,
fn: function () {
console.log(this.a);//5
}
}
};
var j = o.b.fn;//把函数fn赋值给变量j
j();//调用函数fn
这里的属性 a 的值是5,而不是10和12,并且this的指向是window对象。为什么?
你没有理解一句话,这句话非常最重要。this的指向是最后调用它的对象,就是看它执行的时候是谁在调用,在当前例子里面虽然fn函数是被对象 b 所引用但并没有调用,而是把引用的函数fn给了全局变量 j 。然后 j 去调用了函数所以this的指向是window,那么 a 的值为什么是5的原因了。
扩展一下
函数调用:函数名();--------函数名+()
本人小白学习 javascript 与 php 请大家多多关注有更多的本人学习的心得分享出来 ! 大家多多支持