【问题标题】:Javascript : How to keep defined object descriptor of original objects after mixing them up?Javascript:混合后如何保留原始对象的定义对象描述符?
【发布时间】: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


【解决方案1】:

这是我的评论作为答案:

似乎您正在寻找类似于 MDN 关于 Object.assign 的文章下的 completeAssign 示例。这篇文章还应该有助于解释您从上面的代码中看到的行为

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多