Javascript ES6生成器和对象分解
根据ES6,可以使用从自定义生成器返回的数组分解。然而,现在我想不出一种方法来对简单的对象进行同样的分解,因为我认为这应该是可行的(使用Babel和Polyfill):Javascript ES6生成器和对象分解,javascript,ecmascript-6,Javascript,Ecmascript 6,根据ES6,可以使用从自定义生成器返回的数组分解。然而,现在我想不出一种方法来对简单的对象进行同样的分解,因为我认为这应该是可行的(使用Babel和Polyfill): 这真的应该有用吗?因为它总是简单地返回a和b的未定义值。数组的解构与iterable/iterator对象相关联。对象解构不起作用。如果你愿意 const {a, b} = foo 要提取a和b的值,则foo需要实际返回foo.a和foo.b的值。因此,您可能希望只在实例本身上存储属性,而不是.props,或者使用类似gett
这真的应该有用吗?因为它总是简单地返回a和b的未定义值。数组的解构与iterable/iterator对象相关联。对象解构不起作用。如果你愿意
const {a, b} = foo
要提取a
和b
的值,则foo
需要实际返回foo.a
和foo.b
的值。因此,您可能希望只在实例本身上存储属性,而不是.props
,或者使用类似getter的
get a() {
return this.props.a;
}
根据ES6,可以使用从自定义生成器返回的数组分解
对
这应该有效吗
否-您没有在此处使用数组。通过对一个对象文本进行分解,迭代器永远不会被调用,如果是,它会抛出一个关于this.props
对象不可iterable的异常
然而,现在我想不出一种方法来对简单的对象进行同样的分解,因为我认为这应该是可行的(使用Babel和Polyfill):
对象分解在这里可以用作
const {propA: a, propB: b} = new Test();
function*gen(){for(i=0,l=10;i按预期工作this.props
没有符号。迭代器
,因此传递不像您在那里尝试的那样工作。因此,基本上不可能对自定义生成器使用对象分解;(@AlexanderAdam Custom与否无关紧要,对象解构从不调用迭代器。你对此有什么建议吗?不过可以使用代理
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();