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

时间:2018-06-29 02:54:34

标签: javascript

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

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

2 个答案:

答案 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)