gpt4 book ai didi

javascript - 如何在 ECMAScript 5 : Object. create 或 Object.defineProperties 中配置属性?

转载 作者:行者123 更新时间:2023-11-30 18:02:08 28 4
gpt4 key购买 nike

在 ECMAScript 5 中定义属性属性的首选方法是什么?据我了解,至少有两种方式:

function Foo () {
Object.defineProperties(this, {
'a': {
value: "A",
writable: false
},
'b': {
value: "B",
writable: true,
enumerable: true
}
});
}

var f = new Foo();

或者:

var Foo = Object.create({}, {
'a': {
value: "A",
writable: false
},
'b': {
value: "B",
writable: true,
enumerable: true
}
});
};

var f = Object.create(Foo);

除了使用 newObject.create 实例化的优点外,使用 Object.defineProperties() 定义属性是否会影响性能,如第一个例子?两者是等价的吗?是否就可读性达成共识?

最佳答案

is there a performance hit in defining properties using Object.defineProperties()

是的。属性描述符没有像普通属性一样进行优化,因此速度要慢得多。如果您(必须)使用它们,那么无论如何您都不关心性能。将 Object.createnew 进行比较毫无意义,因为它们的行为不同且性能差异微不足道。

Are the two equivalent?

没有。

// The first one,
function Foo() {
Object.defineProperties(this, propertydescriptors);
}
f = new Foo;
// is equivalent to
function Foo() {}
f = Object.defineProperties(new Foo, propertydescriptors);
// as long as there is closure in the property descriptor

// The second one,
foo = Object.create({}, propertydescriptors);
// is equivalent to
foo = Object.defineProperties(Object.create({}), propertydescriptors);

new FooObject.create({}) 不同 - 没有通用的 Foo.prototype。另外,在你的第二个例子中你甚至有

f = Object.create(foo);

这与上面的 f = new Foo 完全不同。

Is there a consensus on readability?

构造函数中的属性描述符并不常见。如果您只需要它们,没有理由不使用更短更简洁的 Object.create 语法。然而,如果你真的想继承非空对象的东西,你应该只使用 Object.create:

f = Object.create(fooproto, propertydescriptors);

如果没有,就用

f = Object.defineProperties({}, propertydescriptors);

关于javascript - 如何在 ECMAScript 5 : Object. create 或 Object.defineProperties 中配置属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16715680/

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