2016-07-11 55 views
3

我有一個prototype功能寫在Array類像爲什麼我的原型函數中'this'等於'Window'?

Array.prototype.myfunc =() => 
{ 
    // ... 
} 

和身體this指的是window當我把它稱爲一個數組像

var result = [1, 69, -1, 1].myfunc(); 

我怎樣才能使參考範圍內到它被調用的數組?

+0

爲什麼要使用lambdas BTW?他們仍然不被許多瀏覽器支持。 –

+1

相關:[箭頭函數與函數聲明/表達式:它們是等價的還是可交換的?](http://stackoverflow.com/q/34361379/218196) –

回答

3

() => { }箭頭語法綁定到當前this這可能是window(取決於您何時分配函數)。

1

ES6中的胖箭頭語法是對當前作用域的隱式綁定。

如果您當前的作用域爲Window(或全局作用域),那麼您在原型上設置的函數將綁定到該作用域。

對於沒有綁定的行爲,您仍然需要良好的ol'function()語法。

1

這裏只是不使用箭頭函數,箭頭函數繼承父範圍的上下文。

Array.prototype.myfunc = function() { 
    // ... 
} 
0

是什麼造成您的問題是使用箭頭功能的。

在箭頭功能,所述this關鍵字可引用:

  1. 窗口(如果全局訪問,而不是在嚴格模式下),
  2. 未定義(如果全局訪問,在嚴格模式下),
  3. 實例(如果在構造函數中),
  4. 對象(如果在對象或實例內的方法或函數)或
  5. 一個綁定/應用價值

要解決你的問題,你必須使用一個「正常」 function(),並且可以調用使用call(this, ...params)你的函數:

  • this你把對象你想要的關鍵字this到綁定到
  • ..args你把你的函數的參數如果有的話。

因此,上述想法,你的代碼可以如下所示:

Array.prototype.myfunc = function(...) { 
    // Your code 
} 

var array = [1, 69, -1, 1]; 
var result = myfunc.call(array, ...); 
  • 使用array作爲第一個參數在call(),你綁定this關鍵字到array
相關問題