(www.ca88.com) 关于this的指向

(www.ca88.com)

var a = 20;
var obj = { a: 10, c: this.a + 20, fn: function { return this.a; }
} console.logobj.c; //40
console.logobj.fn;//10

第二个可以理解,第一个为什么是全局呢?

  • 3月10日提问
  • 评论
  • 邀请回答
  • 编辑

看你上面的评论就能看出你没理解js中的this 在js中this的指向跟定义没关系 只取决于调用模式
console.logobj.c;就相当于console.logthis.a+20 在这种情况下 this毋庸置疑是指向全局的
第二种 console.logobj.fn;//10是方法调用 this 就只想包含这个函数的对象

 1. 普通函数调用,this为全局对象或是undefined 2. 作为对象的方法,this为那个对象 3. new 表达式,this为以该函数为原型的新创建的对象 4. 使用 apply/call指定 this 5. 用bind绑定固定的this 6. 事件处理函数中的this是当前的触发事件的DOM元素event.currentTarget

  • 3月10日回答
  • 评论
  • 编辑

 var obj = { c: this }; console.logobj.c; //window

c是obj对象的属性,那么为毛这个this是window不是obj本身?换个写法。。

 var obj = new Object; obj.c = this; console.logobj.c; //window

这样this很明白的就是全局window了吧,和在函数里的this是两回事

  • 3月10日回答
  • 评论
  • 编辑

obj.c = this.a + 20
console.logobj.c
等于
console.logthis.a + 20, 这个this指向全局

  • 3月10日回答 · 3月10日更新
  • 2 评论
  • 编辑

函数里的this是动态的,对象字面量里的this不是吧。

  • 3月10日回答
  • 评论
  • 编辑

外部的a和obj是全局环境定义的两个变量

es5中的this是在函数调用时确定的,当没有函数调用时,this指向全局。所以obj.c的this指向全局环境;当以对象里的方法的方式调用函数时,它们的 this 是调用该函数的对象,所以第二个this指向obj

es6箭头函数的this与es5不同,它在定义时就确定了指向当对象的方法中又嵌套了一个函数,在es5中嵌套函数中的this指向全局
比如

var a = 20; var obj = { a: 10, c: this.a + 20, fn: function { return function{ console.logthis }; } } console.logobj.fn; // Window
var a = 20; var obj = { a: 10, c: this.a + 20, fn: function { return => { console.logthis }; } } console.logobj.fn; // Obj

  • 3月10日回答
  • 1 评论
  • 编辑

this是谁调用的指向谁,第一个this是window调用的,所以指向的全局

  • 3月10日回答
  • 评论
  • 编辑

发表评论

电子邮件地址不会被公开。 必填项已用*标注