Javascript:如何在混合原始对象后保留它们的已定义对象描述符?
假设我有两个对象,在每个道具上设置描述符:Javascript:如何在混合原始对象后保留它们的已定义对象描述符?,javascript,descriptor,Javascript,Descriptor,假设我有两个对象,在每个道具上设置描述符: var readonly = { libName: _libName, libVersion: _libVersion, createStage: _createStage, renderer: _renderer }; Object.keys(readonly).forEach(function (prop) { Object.defineProperty(readonly, prop, {
var readonly = {
libName: _libName,
libVersion: _libVersion,
createStage: _createStage,
renderer: _renderer
};
Object.keys(readonly).forEach(function (prop) {
Object.defineProperty(readonly, prop, {
writable: false
});
});
及
然后我想用assign合并这两个对象,但是描述符没有保留。我不知道它是否正常,因为创建了第三个对象。如果是这样的话,我该如何处理它以保持描述符?以下是我得到的(顺便说一句,这只是一个示例):
谢谢你能给我的帮助。如果你有更好的解决方案,我完全赞成。以下是我的评论作为回答:
看起来您正在寻找类似MDN关于Object.assign的文章中的示例。这篇文章还应该有助于解释您从上述代码中看到的行为以下是我的评论作为答案:
看起来您正在寻找类似MDN关于Object.assign的文章中的示例。这篇文章还应该有助于解释您从上面的代码中看到的行为似乎您正在寻找类似MDN文章中的
completeAssign
示例的东西。这篇文章还应该帮助解释您从上面的代码中看到的行为。“创建了第三个对象”-不o===readonly
。我相信您真正想要的是var o=Object.freeze(Object.assign({},readonly,writeable))
@Noah Freitas-谢谢,基于此创建了我自己的,它可以工作!你应该把这个改成你的答案,这样我就可以接受了it@Bergi,您是对的,我必须传递一个空对象作为第一个参数来拥有一个新对象。似乎您正在寻找类似MDN文章中的completeAssign
示例的内容。这篇文章还应该帮助解释您从上面的代码中看到的行为。“创建了第三个对象”-不o===readonly
。我相信您真正想要的是var o=Object.freeze(Object.assign({},readonly,writeable))
@Noah Freitas-谢谢,基于此创建了我自己的,它可以工作!你应该把这个改成你的答案,这样我就可以接受了it@Bergi,你是对的,我必须传递一个空对象作为第一个参数来拥有一个新对象。
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}