2016-07-11 56 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
相关问题