Javascript : 混合后如何保留原始对象的定义对象描述符?
Javascript : How to keep defined object descriptor of original objects after mixing them up?
假设我有两个对象,我在每个道具上设置了描述符:
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
});
});
然后我想用分配合并这两个对象,但是没有保留描述符。我不知道它是否正常,因为创建了第三个对象。如果是这样,我该如何处理以保留描述符?这是我得到的(顺便说一句,这只是一个例子):
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}
感谢您提供的任何帮助。如果您有更好的解决方案,我会全力支持。
这是我的评论作为回答:
您似乎在寻找类似于 MDN 关于 Object.assign 文章下的 completeAssign 示例的内容。这篇文章还应该有助于解释您从上面的代码中看到的行为
假设我有两个对象,我在每个道具上设置了描述符:
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
});
});
然后我想用分配合并这两个对象,但是没有保留描述符。我不知道它是否正常,因为创建了第三个对象。如果是这样,我该如何处理以保留描述符?这是我得到的(顺便说一句,这只是一个例子):
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}
感谢您提供的任何帮助。如果您有更好的解决方案,我会全力支持。
这是我的评论作为回答:
您似乎在寻找类似于 MDN 关于 Object.assign 文章下的 completeAssign 示例的内容。这篇文章还应该有助于解释您从上面的代码中看到的行为