var a = 20;
var obj = {
a: 10,
c: this.a + 20,
fn: function () {
return this.a;
}
}
console.log(obj.c); //40
console.log(obj.fn());//10
第二个可以理解,第一个为什么是全局呢?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
看你上面的评论就能看出你没理解js中的this 在js中this的指向跟定义没关系 只取决于调用模式
console.log(obj.c);就相当于console.log(this.a+20) 在这种情况下 this毋庸置疑是指向全局的
第二种 console.log(obj.fn());//10是方法调用 this 就只想包含这个函数的对象
c是obj对象的属性,那么为毛这个this是window不是obj本身?换个写法。。
这样this很明白的就是全局window了吧,和在函数里的this是两回事
obj.c = this.a + 20
console.log(obj.c)
等于
console.log(this.a + 20), 这个this指向全局
函数里的this是动态的,对象字面量里的this不是吧。
外部的a和obj是全局环境定义的两个变量
es5中的this是在函数调用时确定的,当没有函数调用时,this指向全局。所以obj.c的this指向全局环境;当以对象里的方法的方式调用函数时,它们的 this 是调用该函数的对象,所以第二个this指向obj
es6箭头函数的this与es5不同,它在定义时就确定了指向(当对象的方法中又嵌套了一个函数,在es5中嵌套函数中的this指向全局)
比如
this是谁调用的指向谁,第一个this是window调用的,所以指向的全局