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
第二个可以理解,第一个为什么是全局呢?
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
第二个可以理解,第一个为什么是全局呢?
var obj = {
c: this
};
console.log(obj.c); //window
c是obj对象的属性,那么为毛这个this是window不是obj本身?换个写法。。
var obj = new Object();
obj.c = this;
console.log(obj.c); //window
这样this很明白的就是全局window了吧,和在函数里的this是两回事
外部的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.log(this)
})();
}
}
console.log(obj.fn()); // Window
var a = 20;
var obj = {
a: 10,
c: this.a + 20,
fn: function () {
return (() => {
console.log(this)
})();
}
}
console.log(obj.fn()); // Obj
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
5 回答1.9k 阅读
看你上面的评论就能看出你没理解js中的this 在js中this的指向跟定义没关系 只取决于调用模式
console.log(obj.c);就相当于console.log(this.a+20) 在这种情况下 this毋庸置疑是指向全局的
第二种 console.log(obj.fn());//10是方法调用 this 就只想包含这个函数的对象