Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ES6生成器和对象分解_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript ES6生成器和对象分解

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

根据ES6,可以使用从自定义生成器返回的数组分解。然而,现在我想不出一种方法来对简单的对象进行同样的分解,因为我认为这应该是可行的(使用Babel和Polyfill):


这真的应该有用吗?因为它总是简单地返回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();