Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:如何在混合原始对象后保留它们的已定义对象描述符?_Javascript_Descriptor - Fatal编程技术网

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}