根据ES6,可以使用从自定义生成器返回的数组解构。然而现在我无法通过简单的对象解构来找到相同的方法,因为我认为这应该有效(使用Babel和Polyfill):
class Test {
constructor () { this.props = {a: 1, b: 2}; }
*[Symbol.iterator]() { yield* this.props; }
}
const {a, b} = new Test();
这实际上应该不行吗?因为它总是简单地为a和b返回undefined。
答案 0 :(得分:2)
数组解构与可迭代/迭代器对象相关联。对象解构没有。如果你想要
const {a, b} = foo
要提取a
和b
的值,然后foo
需要实际返回foo.a
和foo.b
的值。因此,您要么只想将属性存储在实例本身而不是.props
,要么使用像
get a() {
return this.props.a;
}
答案 1 :(得分:1)
根据ES6,可以使用从自定义生成器返回的数组解构。
是
这应该有用吗?
不 - 你这里没有使用数组。通过对对象文字进行解构,永远不会调用迭代器,如果是,它会抛出一个关于this.props
对象不可迭代的异常。
现在我无法通过简单的对象解构来找到相同的方法,因为我认为这应该有效(使用Babel和Polyfill):
class Test {
constructor () {
this.propA = 1;
this.propB = 2;
this.propArr = [];
}
*[Symbol.iterator]() {
yield this.propA; // yield the single value
yield this.propB; // yield another value
yield* this.propArr; // yield every from an iterable
}
}
const [a, b] = new Test();
// ^ ^ *array* destructuring!
对象解构可以在这里用作
const {propA: a, propB: b} = new Test();