深入理解Js中的this关键字
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了深入理解Js中的this关键字,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1543字,纯文字阅读大概需要3分钟。
内容图文
![深入理解Js中的this关键字](/upload/InfoBanner/zyjiaocheng/303/2d4bd9c8ab2742ffa3353004ad5860b6.jpg)
在一个函数中,this总是指向当前函数的所有者对象,this总是在运行时才能确定其具体的指向, 也才能知道它的调用对象。
window.name = "window"; function f(){ console.log(this.name); } f();//输出window var obj = {name:'obj'}; f.call(obj); //输出obj
在执行f()时,此时f()的调用者是window对象,因此输出"window"。
f.call(obj) 是把f()放在obj对象上执行,相当于obj.f(),此时f中的this就是obj,所以输出的是"obj"。
code1:
var foo = "window"; var obj = { foo : "obj", getFoo : function(){ return function(){ return this.foo; }; } }; var f = obj.getFoo(); console.log(1+":"+f()); //输出window
code2:
var foo = "window"; var obj = { foo : "obj", getFoo : function(){ var that = this; return function(){ return that.foo; }; } }; var f = obj.getFoo(); console.log(f()); //输出obj
code1:
执行var f = obj.getFoo()返回的是一个匿名函数,相当于:
var f = function(){
return this.foo;
}
f() 相当于window.f(), 因此f中的this指向的是window对象,this.foo相当于window.foo, 所以f()返回"window"
code2:
执行var f = obj.getFoo() 同样返回匿名函数,即:
var f = function(){
return that.foo;
}
唯一不同的是f中的this变成了that, 要知道that是哪个对象之前,先确定f的作用域链:f->getFoo->window 并在该链条上查找that,此时可以发现that指代的是getFoo中的this, getFoo中的this指向其运行时的调用者,从var f = obj.getFoo() 可知此时this指向的是obj对象,因此that.foo 就相当于obj.foo,所以f()返回"obj"。
对作用域链不清楚的同学可以参看JavaScript从作用域到闭包。
以上就是深入理解Js中的this关键字的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的深入理解Js中的this关键字全部内容,希望文章能够帮你解决深入理解Js中的this关键字所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。