javascript - JS : Object Properties Change in Constructor

标签 javascript node.js properties ecmascript-6

我有这个代码:

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/

相关文章:

javascript - 在折线图顶部显示值

asp.net - 如何通过 JavaScript ( JQuery ) 从 HTML 对象中通过 id 获取元素内容

node.js - 使用本地 dynamodb 客户端的 dynamo-client

excel - 列出 VBA 2003 中类的属性

快速修改结构的通用属性

javascript - 与 react 一起使用时不应该禁用 eslint

javascript - 重写 JQuery 选择器以支持元素 id 中的美元符号 ($)

javascript - 什么需要 ('module' )(参数);意思是?

node.js - nodejs 文件系统与 .net System.IO 的性能对比?

java - 在 Java 中存储/添加/删除一组简单数据的最佳方法