我有一個prototype
功能寫在Array
類像爲什麼我的原型函數中'this'等於'Window'?
Array.prototype.myfunc =() =>
{
// ...
}
和身體this
指的是window
當我把它稱爲一個數組像
var result = [1, 69, -1, 1].myfunc();
我怎樣才能使參考範圍內到它被調用的數組?
我有一個prototype
功能寫在Array
類像爲什麼我的原型函數中'this'等於'Window'?
Array.prototype.myfunc =() =>
{
// ...
}
和身體this
指的是window
當我把它稱爲一個數組像
var result = [1, 69, -1, 1].myfunc();
我怎樣才能使參考範圍內到它被調用的數組?
該() => { }
箭頭語法綁定到當前this
這可能是window
(取決於您何時分配函數)。
ES6中的胖箭頭語法是對當前作用域的隱式綁定。
如果您當前的作用域爲Window
(或全局作用域),那麼您在原型上設置的函數將綁定到該作用域。
對於沒有綁定的行爲,您仍然需要良好的ol'function()
語法。
這裏只是不使用箭頭函數,箭頭函數繼承父範圍的上下文。
Array.prototype.myfunc = function() {
// ...
}
是什麼造成您的問題是使用箭頭功能的。
在箭頭功能,所述this
關鍵字可引用:
要解決你的問題,你必須使用一個「正常」 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
。
爲什麼要使用lambdas BTW?他們仍然不被許多瀏覽器支持。 –
相關:[箭頭函數與函數聲明/表達式:它們是等價的還是可交換的?](http://stackoverflow.com/q/34361379/218196) –