深入理解javascript语言中的this

说到js中的函数中的this指针,就像是悟空的毫毛一样,可以随时变来变去,理解起来十分困难,但是万变不离其宗,都是悟空的毫毛而已 ^-^.

要中文js中的this,只要记住一点:[color=red]谁调用了该函数,那么该函数中的this就是指的它;如果没有看出是谁调用的,那么就是window调用的,因为只有它有这个权利[/color]。下面结合例子来理解:

例子1:

function F(){
function C(){
return this;
}
return C();
}

var o = new F();
console.log(o); // 打印 Window
console.log(window); // 打印 Window

上面函数C中的this指针是执行 o 吗?
首先我们看,对象 o 调用了 函数 C() 吗?没有吧,对象 o 没有做任何事情!所以C中的this指针不是指向 o ,而是widow。这里其实可以看做是 window 调用 “new F()”,所以this指针是window,而不是 o ,因为o 并没有调用任何方法。

例子2:

var fullname = 'focus2008';
var obj = {
fullname:'yuanfang',
prop:{
fullname:'direnjie',
getfullname:function(){
return this.fullname;
}
}
};
console.log(obj.prop.getfullname()); // direnjie
var test = obj.prop.getfullname; // focus2008
console.log(test());

上面的结果有这么理解呢?
1)因为obj 是一个对象,但是 prop 也是一个对象,所以第一个直接调用 getfullname()的是prop,所以打印的是 direnjie, 而不是 yuanfang
2)第二个 test 是一个全局变量,他的值是一个函数地址,test()调用其实就是:window.test(),所以打印的是全局的fullname,也就是 window.fullname;
如此而已。

关于call和apply会改变函数的调用者,所以也就改变了函数中的this指针。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值