javascript - 我应该如何在 ES6 实例中保留对 'options object' 的引用?

标签 javascript ecmascript-6

给定一个如下所示的 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

这是 above code 的链接通过 6to5 运行。

最佳答案

ES6 不允许在类声明中声明原型(prototype)属性,这有点痛苦……但是,使用 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());

这是 above code running on 6to5 REPL 的链接.如果您想要一个合并默认值和继承的示例,请查看 constructor of this class .

关于javascript - 我应该如何在 ES6 实例中保留对 'options object' 的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28477967/

相关文章:

javascript - 如何将任意参数传递给 javascript 构造函数

javascript - 如何在 three.js 中获取 Matrix3 的逆?

javascript - 记录前缀 - 使用非单例或其他方法

javascript - 用于绑定(bind) document.createElement 引用的 VSCode Intellisense

javascript - 将标记从国家名称放入国家

javascript - 即使元素存在,getElementById() 也会返回 null

php - 通知用户数据库更改

JavaScript - 调用父类函数并替换它

javascript - 在 Redux 中构建 store

javascript - 自动映射 React 组件的 Prop