为什么'this'在原型函数中等于'Window'?

时间:2016-07-11 00:40:11

标签: javascript

我在prototype类上编写了Array函数,如

Array.prototype.myfunc = () => 
{
   // ... 
}
当我在像

这样的数组上调用它时,

并且正文this中指的是window

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

如何让它引用调用它的数组?

4 个答案:

答案 0 :(得分:3)

() => { }箭头语法绑定到当前this,可能是window(取决于您分配函数的时间)。

答案 1 :(得分:1)

ES6中的胖箭头语法是对当前范围的隐式绑定。

如果您当前的范围是Window(或全局范围),那么您在原型上设置的函数将绑定到该范围。

你还需要好的经历。没有绑定的行为的function ()语法。

答案 2 :(得分:1)

这里不使用箭头功能,箭头功能从父范围继承上下文。

IF (new.Value <> old.Value AND old.Value IS NOT NULL) THEN
        CALL raise_error;
END IF;

答案 3 :(得分:0)

造成问题的原因是使用箭头功能

在箭头功能中, this 关键字可能会引用:

  1. 窗口(如果全局访问,而不是严格模式),
  2. undefined (如果在全局范围内以严格模式访问),
  3. 实例(如果在构造函数中),
  4. 对象(如果在对象或实例中的方法或函数中)或
  5. 绑定/应用值
  6. 要解决您的问题,您必须使用&#34;正常&#34; 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