gpt4 book ai didi

javascript - JS : Object Properties Change in Constructor

转载 作者:行者123 更新时间:2023-12-03 03:27:26 26 4
gpt4 key购买 nike

我有这个代码:

class Obj {
constructor() {
this.foo = "foo";
}
}

Object.defineProperty(Obj.prototype,'foo',{enumerable:false,writable:true});
Object.defineProperty(Obj,'foo',{enumerable:false,writable:true});

let obj = new Obj();

console.log(obj);

我的输出是:

Obj { foo: 'foo' }

问题是,我将 foo 的可枚举属性定义为 false。但是当我在构造中使用“this.foo”时,该属性会更改它。

我知道我可以放入构造函数:

Object.defineProperty(this,'foo',{enumerable:false,writable:true});

我的新输出正确抛出:

Obj {}

但是,我的问题是是否可以更改 foo 的属性一次而不是在构造函数中更改它?

谢谢!

最佳答案

my question is if is possible to change once the property of foo and not change it in the constructor?

简短的回答:不。

这是因为每次调用构造函数并执行 this.foo = "foo"; 时,您都会创建一个属性。您在 Obj.propertyObj 上创建的属性实际上完全不相关。它们是完全独立的属性,定义在不同的对象上,而不是 this

只需更仔细地看看 Objobj:

enter image description here

您可以看到三个不同的 foo 属性,我注意到哪些操作创建了它们。希望这可以更清楚地说明为什么设置 Obj.fooObj.prototype.foo 的可枚举性对 obj.foo 没有影响。

<小时/>

this.foo = "foo"; 创建一个可枚举属性。如果您不希望它是可枚举的,那么您必须使用 Object.defineProperty 创建它。同样,您在 ObjObj.prototype 上创建的属性与您在 this 上创建的属性无关。

关于javascript - JS : Object Properties Change in Constructor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46255598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com