Javascript 为什么是';这';等于';窗口';在我的原型函数中?

Javascript 为什么是';这';等于';窗口';在我的原型函数中?,javascript,Javascript,我有一个原型函数写在数组类上 Array.prototype.myfunc = () => { // ... } 在body中,这个指的是窗口,我在数组中调用它,比如 var result = [1, 69, -1, 1].myfunc(); 如何使其引用调用它的数组?ES6中的胖箭头语法是对当前作用域的隐式绑定 Array.prototype.myfunc = function() { // ... } 如果您当前的作用域是Window(或全局作用域),那么您刚才

我有一个
原型
函数写在
数组
类上

Array.prototype.myfunc = () => 
{
   // ... 
}
在body中,
这个
指的是
窗口
,我在数组中调用它,比如

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

如何使其引用调用它的数组?

ES6中的胖箭头语法是对当前作用域的隐式绑定

Array.prototype.myfunc = function() {
   // ... 
}
如果您当前的作用域是
Window
(或全局作用域),那么您刚才在原型上设置的函数将绑定到该作用域


对于没有绑定的行为,您仍然需要良好的ol'
函数()
语法。

箭头语法绑定到当前的
这个
窗口(取决于您分配函数的时间)。

这里不要使用箭头函数,箭头函数从父作用域继承上下文

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

导致您出现问题的原因是使用了箭头功能

在箭头函数中,
关键字可能指:

  • 窗口(如果全局访问,而不是在严格模式下访问)
  • 未定义(如果在严格模式下全局访问)
  • 实例(如果在构造函数中)
  • 对象(如果在对象或实例内部的方法或函数中)或
  • 绑定/应用的值
  • 要解决此问题,您必须使用“普通”的
    函数()
    ,并且可以使用
    调用(此,…参数)
    调用您的函数:

    • this
      中,您将要将关键字
      this
      绑定到的对象放入中,然后
    • .args
      中,输入函数的参数
    因此,考虑到上述内容,您的代码可以如下所示:

    Array.prototype.myfunc = function(...) {
       // Your code
    }
    
    var array = [1, 69, -1, 1];
    var result = myfunc.call(array, ...);
    
    • 使用
      array
      作为
      call()
      中的第一个参数,您可以将
      关键字绑定到
      数组

    顺便说一句,您为什么使用lambdas?许多浏览器仍然不支持它们。相关: