深层对象方法中的this

this指向的对象是运行时所在的对象,而不是表面代码中所处的对象

以下三种情况,this指向全局对象

情况一 (obj.foo = obj.foo)()   // window

情况二 (false || obj.foo)()    // window

情况三 (1 , obj.foo)()          // window

 

 

 

 

 

 1 var a = {
 2   p: 'Hello',
 3   b: {
 4     m: function() {
 5       console.log(this.p);
 6     }
 7   }
 8 };
 9 
10 a.b.m() // undefined

 对象中的方法,本质上是函数。函数被单独创建在内存当中,对象属性(方法名)的属性描述对象的value属性保存了函数的地址。实际执行如下代码:

 1 var b = {
 2   m: function() {
 3    console.log(this.p);
 4   }
 5 };
 6 
 7 var a = {
 8   p: 'Hello',
 9   b: b
10 };
11 
12 (a.b).m() // undefined,等同于 b.m()

此时this指向b,b中没有变量p。

 

 

 

一: 把方法赋值给变量,通过变量调用函数相当于在全局环境下调用函数,this指向全局环境

 

 

 二:把对象赋值给变量,在对象环境下调用函数,this指向对象

 

posted @ 2021-01-07 10:17  呈心者  阅读(117)  评论(0编辑  收藏  举报