我试图继承默认规范属性,这样,当我在继承规范中创建特定的覆盖值时,我仍然可以访问(通过继承)未修改的规范值:
let default_boltSpec = {
head_diameter: 2,
shaft_diameter: 0.8,
};
Object.freeze(default_boltSpec);
let derivedBoltSpec = Object.create(default_boltSpec);
console.log( "derivedBoltSpec:", derivedBoltSpec );
Object.assign(derivedBoltSpec , {
head_diameter: 1.5,
});

奇怪的是,我似乎不允许"覆盖"继承了价值观!如何严格地在原型链上的值会干扰我允许放在我的对象上的属性?
编辑: 此屏幕截图显示了在Firefox Web开发人员控制台中运行上述代码段的效果:
此图像显示Object.create不会向创建的对象添加任何属性。这与the documentation一致。
答案 0 :(得分:1)
你冻结了这个物体。这也将冻结属性值。
从上下文来看,我认为您要使用的是seal
而不是freeze
。例如,
let default_boltSpec = {
head_diameter: 2,
shaft_diameter: 0.8,
};
Object.seal(default_boltSpec);
let derivedBoltSpec = Object.create(default_boltSpec);
Object.assign(derivedBoltSpec , {
head_diameter: 1.5,
});
console.log( derivedBoltSpec)
编辑:您必须再次使属性可写。您可以使用Object.defineProperty执行此操作。但是你基本上是循环遍历所有属性并使它们可写。例如,
Object.defineProperty(derivedBoltSpec 'head_diameter:', { value: 1.5, enumerable: true, configurable: true, writable: true });