【发布时间】:2016-03-18 19:28:13
【问题描述】:
假设我有这两个对象,我在每个道具上设置描述符:
var readonly = {
libName: _libName,
libVersion: _libVersion,
createStage: _createStage,
renderer: _renderer
};
Object.keys(readonly).forEach(function (prop) {
Object.defineProperty(readonly, prop, {
writable: false
});
});
和
var writable = {
rendererOptions: _rendererOptions
};
Object.keys(writable).forEach(function (prop) {
Object.defineProperty(writable, prop, {
writable: false
});
});
然后我想用assign合并这两个对象,但描述符没有保留。我不知道它是否正常,因为创建了第三个对象。如果是这样,我如何才能保持描述符?这是我得到的(顺便说一句,这只是一个示例):
console.log(Object.getOwnPropertyDescriptor(writable, "rendererOptions"));
//gives Object {value: Object, writable: false, enumerable: true, configurable: true}
var o = Object.assign(readonly, writable);
console.log(Object.getOwnPropertyDescriptor(o, "rendererOptions"));
//gives Object {value: Object, writable: true, enumerable: true, configurable: true}
感谢您提供的任何帮助。如果你有更好的解决方案,我会全力以赴。
【问题讨论】:
-
似乎您正在寻找类似 @987654325@ 示例的 MDN 关于
Object.assign的文章。这篇文章还应该有助于解释您从上面的代码中看到的行为。 -
"第三个对象被创建" - 不。
o === readonly. -
我相信你真正想要的是
var o = Object.freeze(Object.assign({}, readonly, writeable)) -
@Noah Freitas - 谢谢,在此基础上创建了我自己的,它可以工作!应该将此更改为您的答案,以便我可以接受它
-
@Bergi,你说得对,我必须将一个空对象作为第一个参数传递给一个新对象。
标签: javascript descriptor