码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript:闭包中的this

时间:2020-07-21 13:42:15      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:span   get   java   turn   访问   因此   代码   obj   UNC   

匿名函数的执行环境具有全局性,因此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

标签:span   get   java   turn   访问   因此   代码   obj   UNC   

原文地址:https://www.cnblogs.com/JKHao/p/13353890.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!