gpt4 book ai didi

javascript - 使用 Object.create() 的目的是什么?

转载 作者:行者123 更新时间:2023-11-30 14:31:34 26 4
gpt4 key购买 nike

this.options = Object.assign(Object.create(this.defaultOptions), options);

我明白这段代码在做什么,但是 Object.create() 的目的是什么?我能想到的唯一好处是即使覆盖它们也可以引用 defaultOptions。但我想不出一个很好的理由说明为什么这在 99% 的时间里都是有用的。

最佳答案

使用Object.create 设置this.options 的原型(prototype)。它允许您隐藏 options 属性上的 defaultOptions 属性, 允许您在以下情况下恢复到 defaultOptions需要。例如:

const options = { foo: 'foo', bar: 'bar' };
class Something {
constructor() {
this.defaultOptions = options; // only a reference
this.options = Object.assign(Object.create(this.defaultOptions), options);
}
}
const inst = new Something();
// Change 'foo':
inst.options.foo = 'foo2';
console.log(inst.options.foo);
// Reset 'foo' to default:
delete inst.options.foo;
console.log(inst.options.foo);
// Assign another custom value to 'foo':
inst.options.foo = 'foofoo';
console.log(inst.options.foo);

如果没有 Object.create,这种相同类型的行为是不可能的 - 一旦对象被实例化,如果任何 option 被覆盖,获得默认值的唯一方法选项将是对默认选项的引用,这不一定依赖于:

const options = { foo: 'foo', bar: 'bar' };
class Something {
constructor(constrOptions) {
this.defaultOptions = options; // only a reference
this.options = Object.assign({}, this.defaultOptions, constrOptions);
}
}
const inst = new Something();
// Change 'foo':
inst.options.foo = 'foo2';
console.log(inst.options.foo);


// Reset 'foo' to default...??
delete inst.options.foo;
// Doesn't work:
console.log(inst.options.foo);


// Assign another custom value to 'foo':
inst.options.foo = 'foofoo';
console.log(inst.options.foo);

关于javascript - 使用 Object.create() 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51093621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com