【问题标题】:What is the purpose of using Object.create()?使用 Object.create() 的目的是什么?
【发布时间】:2018-06-29 02:54:34
【问题描述】:
this.options = Object.assign(Object.create(this.defaultOptions), options);

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

【问题讨论】:

  • 它对于特定工作来说是一个有用的工具......如果你没有钉子,我猜你不会知道锤子是干什么用的

标签: javascript


【解决方案1】:

使用Object.create 设置this.options 的原型。它允许您在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);

【讨论】:

  • 在什么情况下您希望恢复默认值?
  • 例如,每个选项都有一个“重置为默认值”按钮的用户界面
【解决方案2】:
猜你喜欢
  • 2014-02-17
  • 1970-01-01
  • 2014-10-01
  • 2012-02-20
  • 2018-04-02
  • 1970-01-01
  • 2013-02-24
  • 1970-01-01
  • 2014-03-11
相关资源
最近更新 更多