我应该如何保留对'options对象'在ES6实例中
How should I keep a reference to 'options object' in a ES6 instance?
给定如下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
只是一个肤浅的合并。
相关文章:
- 在 Node.JS、Jade 模板和 Javascript Options 对象上
- 我应该如何保留对'options对象'在ES6实例中
- Angular JS ng-options 返回 “?对象:005 ?
- 如何在“ng-options”属性中循环访问对象内的数组
- 当 ng-model 和 ng-options 引用不同的对象时,如何使用 ng-init 在选择框中选择默认值
- Undefined不是一个有效的uri或options对象.在expressjs
- Angular ng-options返回索引而不是对象值
- Angular JS的ng-options来访问对象中的不工作的对象
- 指定一个对象来选择value - ng-options
- AngularJS:尝试在ng-options和输出值中设置selected,而不是整个对象
- Ng-options不能用于对象
- 在$scope上调用相同的options对象
- 如何使用ng-options初始化一个带有对象值的select
- 如何使用ng-options遍历对象中的数组
- AngularJS的ng-options使用所有对象的属性键
- 如何设置ngOptions的默认值,当options是对象时,default是一个整数ID
- 在AngularJS中对不同对象使用ng-options
- 对象函数(){location.href=this.options.url);没有方法'apply'
- 对对象数组中的对象使用 ng-options
- Ng-options带有一个密钥对对象数组