是否可以在JavaScript构造函数中解构实例/成员变量?
Is it possible to destructure instance/member variables in a JavaScript constructor?
是否有可能在JavaScript类的构造函数中使用解构赋值来分配实例变量,类似于如何对正常变量进行赋值?
下面的例子可以使用:
var options = {one: 1, two: 2};
var {one, two} = options;
console.log(one) //=> 1
console.log(two) //=> 2
但是我不能让像下面这样的东西工作:
class Foo {
constructor(options) {
{this.one, this.two} = options;
// This doesn't parse correctly and wrapping in parentheses doesn't help
}
}
var foo = new Foo({one: 1, two: 2});
console.log(foo.one) //=> I want this to output 1
console.log(foo.two) //=> I want this to output 2
有多种方法可以做到这一点。第一个只使用解构,并将选项的属性分配给this
上的属性:
class Foo {
constructor(options) {
({one: this.one, two: this.two} = options);
// Do something else with the other options here
}
}
需要额外的括号,否则JS引擎可能会将{ ... }
误认为对象字面值或块语句。
第二个使用Object.assign
和解构:
class Foo {
constructor(options) {
const {one, two} = options;
Object.assign(this, {one, two});
// Do something else with the other options here
}
}
如果您想将所有选项应用于实例,您可以使用Object.assign
而无需解构:
class Foo {
constructor(options) {
Object.assign(this, options);
}
}
除了Nils的答案。它也适用于对象spread(…)
class Foo {
constructor(options = {}) {
({
one: this.one,
two: this.two,
...this.rest
} = options);
}
}
let foo = new Foo({one: 1,two: 2,three: 3,four: 4});
console.log(foo.one); // 1
console.log(foo.two); // 2
console.log(foo.rest); // {three: 3, four: 4}
…和/或用于进一步处理的自定义设置
class Foo {
constructor(options = {}) {
({
one: this.one,
two: this.two,
...this.rest
} = options);
}
set rest(options = {}) {
({
three: this.three,
...this.more
} = options);
}
}
let foo = new Foo({one: 1,two: 2,three: 3,four: 4});
console.log(foo.one); // 1
console.log(foo.two); // 2
console.log(foo.three); // 3
console.log(foo.more); // {four: 4}
相关文章:
- ES6构造函数返回基类的实例
- 为什么可以't我使用成员方法初始化一个实例
- 如何访问实例上的静态成员
- 如何让每个实例继承其自己的成员实例
- 对于类实例的私有成员,是否有更优雅的方法
- Javascript:在闭包中,私有成员(var)可以在实例化后添加吗
- 如何使“this”引用成员函数而不是其所有者类的实例
- javascript中的闭包与c++中的类实例(它有一个私有成员和一个公共方法)相当吗
- 在Javascript中调用不带传递函数的组合私有类成员的公共实例方法
- 在javascript中只允许一个类成员的实例
- 创建一个不使用实例id的私有成员
- 在JavaScript中实现实例成员/方法
- 多次继承,使每个实例的成员保持私有
- 将实例化一个javascript函数计算它的成员函数
- 是否可以通过javascript原型为每个实例分配成员
- 私有成员被另一个实例覆盖
- 私有成员——跨实例共享的Javascript变量
- 是否可以在JavaScript构造函数中解构实例/成员变量?
- 通过实例方法修改类的所有成员
- Javascript封装——以任何方式访问给定实例的私有成员