无法读取未定义的属性“ apply”

时间:2018-10-11 19:32:02

标签: javascript

我正在尝试了解.apply方法。因此,我创建了以下代码:

pr1

我认为最后一个打开和关闭括号可以为空,因此o.method方法是自动调用的。但是用空括号

pr1

我收到以下错误: 无法读取未定义的属性“应用”

有人可以解释一下为什么吗?

亲切的问候 亨宁

2 个答案:

答案 0 :(得分:1)

如果调用函数function(original) {},则返回函数function(x, y) {},并在参数original上创建一个闭包。因此,function(x, y) {}内部的代码始终可以访问您传递给function(original) {}的内容

使用:

o.method = (function(original) {
  return function(x, y) {
    // ... 
  }
})(o.method);

您将返回的function(x, y) {}函数封闭在originalo.method上,并将原始o.method作为参数。

如果您现在写o.method(1,2),则调用返回的function(x, y) {}

如果您在没有参数function(original) {}的情况下调用了(function(original) {})(),则originalundefined并且original.apply会导致您发布错误。

答案 1 :(得分:1)

进行一些更改,您的代码是正确的:

var o = new Object();
o.method2 = function(x,y){return x+y};

o.method = (function (original){
    return function(x,y){
            var result = original.call(this, x,y);
        return result;
    }
})(o.method2);

也可以测试并运行:

o.method(2,3)

结果为5

还可以应用:

var o = new Object();
o.method2 = function(x,y){return x+y};

o.method = (function (original){
    return function(x,y){
            var result = original.apply(this, [x,y]);
        return result;
    }
})(o.method2);

然后测试:

o.method(2,3)

结果为5

有关call()和apply()用法的更多信息,请阅读本文: http://adripofjavascript.com/blog/drips/invoking-javascript-functions-with-call-and-apply.html