我应该如何保留对'options对象'在ES6实例中

How should I keep a reference to 'options object' in a ES6 instance?

本文关键字:对象 options ES6 实例 何保留 保留 我应该      更新时间:2023-09-26

给定如下ES6类,保持对传递到构造函数中的数据的引用以便从实例方法中获得的最佳方法是什么?

到目前为止,我发现最好的方法是手动将每个引用添加到构造函数中的某个实例属性。有更干净/更简单的方法吗?

class Test {
  constructor( {
    option1 = 1,
    option2 = 2
  } = {} ) {
    // What's the best way to keep a reference to
    // the options on the instance?
    this.options = {
      option1,
      option2
    };
  }
  addOptions() {
    return this.options.option1 + this.options.option2;
  }
}
let t = new Test({
  option1: 5
});
console.log(t.addOptions()); // 7

以下是通过6to5运行的上述代码的链接。

ES6不允许在类声明中声明原型属性,这有点麻烦。。。然而,使用getter返回默认值可能对您的情况有利。也许可以试试这样的东西:

class Test {
  get defaults() { return { option1: 1, option2: 2 }; }
  constructor(parameters) {
    this.options = Object.assign({}, this.defaults, parameters)
  }
  doSomething() {
    return this.options.option1 + this.options.option2;
  }
}
let test = new Test({
  option1: 5
});
console.log(test.doSomething());

以下是在6to5REPL上运行的上述代码的链接。如果您想要一个将默认值与继承合并的示例,请查看此类的构造函数。

由于您正在销毁第一个参数,并且没有命名引用,那么this.options = arguments[0]呢?

如果你不想让外部功能修改它,你可以深度冻结它。

如果您希望它不可访问,请在模块的作用域中使用实例键控的WeakMap来隐藏它们。

要获得默认值,您可以使用以下内容:

const defaults = {...}
function(options) {
  this.options = Object.assign({}, defaults, options)
  // now destructure to local vars as needed
  ...
}

注意:Object.assign只是一个肤浅的合并。