Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.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 如何调用对myArray[Symbol.iterator]的引用_Javascript_Iterator_Symbols - Fatal编程技术网

Javascript 如何调用对myArray[Symbol.iterator]的引用

Javascript 如何调用对myArray[Symbol.iterator]的引用,javascript,iterator,symbols,Javascript,Iterator,Symbols,我不明白以下错误的含义。我要做的是存储对myiteratable[Symbol.iterator]的引用,然后调用它。但是我得到了以下错误 let str = 'foo'; let gen = str[Symbol.iterator]; console.log(typeof gen); // 'function' let it = gen(); // ERROR: Can't convert undefined to object. 为什么我不能打电话给gen?我

我不明白以下错误的含义。我要做的是存储对myiteratable[Symbol.iterator]的引用,然后调用它。但是我得到了以下错误

let str = 'foo';
let gen = str[Symbol.iterator];
console.log(typeof gen);    // 'function'
let it = gen();             // ERROR: Can't convert undefined to object.
为什么我不能打电话给gen?我意识到我可以通过以下方法解决这个问题:

let gen = function* () {
    let it = str[Symbol.iterator]();
    for (let n = it.next(); !n.done; n = it.next()) {
        yield n.value;
    }
}

但是我想了解这里发生了什么。

生成器依赖于其调用上下文作为基本对象,这在您的示例中是缺失的。使用
.bind
确保其调用上下文是您的
str

conststr='foo';
const gen=str[Symbol.iterator].bind(str);
const it=gen();
console.log(it.next())