3 回答
TA贡献2036条经验 获得超8个赞
由于您在对象内使用箭头函数,因此this变为window,而不是Obj。但是在类中,run 函数在构造函数内部,this生成对象,而不是window. 如果您希望对象打印对象 x,则需要使用Obj.x.
var Obj = {
x:30 ,
run : () => {
console.log(Obj.x);
}
}
即使两个对象在同一个作用域中,它们也不是在同一个作用域中创建的,它们的创建方式也不同。类是构造函数,对象不是。
如果您确实想使用this关键字,那么run : () =>您可以简单地将其替换为run ()。然后你可以使用this.x代替Obj.x。它有点像在类中(在其构造函数之外)定义一个函数。
var Obj = {
x:30 ,
run () {
console.log(this.x);
}
}
TA贡献1799条经验 获得超6个赞
假设这是在浏览器中,当你说var x = 10; // global var全局对象是浏览器的window,所以你说window.x = 10;
然后创建你的“目标文件”,并指定其X,x:30但你仍然在全球范围内,所以在那里当“运行”运行,this还是指window和window.x为10。
当您拥有myClass并构造其中之一newObj时,此时this现在指的是构造的对象,因此this.x指的是类成员x,即 30。
在控制台中查看时,它们可能看起来相同,但这是因为控制台两次都在同一范围内工作。尝试在您所做的每一行上放置一个断点,console.log并检查您遇到断点时的this和的值。this.x
添加回答
举报
