this.options = Object.assign(Object.create(this.defaultOptions), options);
我了解这段代码在做什么,但是Object.create()
的目的是什么?我能想到的唯一好处是,即使您覆盖了它们,也可以引用defaultOptions
。但是我想不出为什么在99%的时间里有用的理由。
答案 0 :(得分:2)
使用Object.create
设置this.options
的原型。它允许您在defaultOptions
属性的options
上隐藏属性,和使您可以在需要时还原为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);
答案 1 :(得分:0)
Object.create()
从passs对象创建新对象。我不确定您是否担心这里。但是您可以肯定地访问MDN以获取更多详细信息:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create
https://medium.com/@tkssharma/objects-in-javascript-object-assign-deep-copy-64106c9aefab