2013-07-21 17 views
2

javascript生成器中的this的值是什麼? 在下面的代碼中,兩個比較都返回false,並且當我執行.toSource()時,this看起來是空的Object。參考ECMA或MDN文檔會有所幫助,但我無法找到任何內容。這個javascript生成器的值

function thisGenerator(){ 
    while(1) 
     yield this; 
} 

var gen=new thisGenerator(); 
alert(gen.next()==thisGenerator); 
alert(gen.next()==gen); 
+0

'警報(gen.next()的instanceof thisGenerator); // true' –

+0

但爲什麼它不等於'gen'? – simonzack

+0

這只是一個猜測,但我猜你的實例是用提供迭代器行爲的特殊對象包裝的。 –

回答

1

this仍然服從正常規則。 考慮,在全球範圍內是window

var gen = (function() { yield this; })(); gen.next() === window // true 
var gen = (function() { "use strict"; yield this; })(); gen.next() === undefined // true 

在特殊模式,在this未結合的功能將是全球範圍(這恰好是window),而在嚴格模式是undefined

PS:當調用的綁定的功能,一切都仍然照常:

var o = { foo: function() { yield this; } }; o.foo().next() === o // true 
var o = {}; function foo() { yield this; }; foo.call(o).next() === o // true