JavaScript:闭包中的this
Posted jkhao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript:闭包中的this相关的知识,希望对你有一定的参考价值。
匿名函数的执行环境具有全局性,因此this经常指向window。
1 var name = "window"; 2 var obj = { 3 name : "obj", 4 getName : function(){ 5 return function(){ 6 return this.name; 7 } 8 } 9 }; 10 console.log(obj.getName()());
以上代码执行结果:
window
闭包的活动对象中的this,有明确指向的只有window。为了解决这个问题,我们可以将外部作用域的this对象保存在一个变量里,就可以让闭包访问了。
1 var name = "window" 2 var obj = { 3 name: ‘obj‘, 4 get: function() { 5 var that = this 6 return function() { 7 return that.name 8 } 9 } 10 } 11 12 console.log(obj.get()()) // obj
console.log(obj.getName()());
以上代码执行结果:
obj
1
因为that是我们在包含函数中特意声明的一个变量,因此闭包可以通过that访问到外部函数的this,即obj。
还有一种特殊情况会使this的值改变
1 var name = ‘window‘ 2 var obj = { 3 name: ‘obj‘, 4 get: function() { 5 return this.name 6 } 7 } 8 9 var getname1 = obj.get 10 console.log(obj.get()) // obj 11 console.log(getname1()) // window
以上代码执行结果:
obj
window
当把方法赋值给getname2时,由于getname2属于window,因此this的指向就不能得到维持。
以上是关于JavaScript:闭包中的this的主要内容,如果未能解决你的问题,请参考以下文章