Javascript 无法读取属性';应用';未定义的

Javascript 无法读取属性';应用';未定义的,javascript,Javascript,我正在努力理解。应用方法。因此,我创建了以下代码: var o = new Object(); o.method = function(x, y) { return x + y }; o.method = (function(original) { return function(x, y) { var a = 'A'; var b = 'B'; var result = original.apply(this, [a, b]); return resu

我正在努力理解。应用方法。因此,我创建了以下代码:

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

o.method = (function(original) {
  return function(x, y) {
    var a = 'A';
    var b = 'B';
    var result = original.apply(this, [a, b]);
    return result;
  }
})(o.method);

console.log(o.method(1, 2));
我认为最后的开括号和闭括号可能是空的,因此方法o.method会被自动调用。但是用空括号

o.method = (function(original) {
  return function(x, y) {
    var a = 'A';
    var b = 'B';
    var result = original.apply(this, [a, b]);
    return result;
  }
})();

o.method(1, 2);
我得到以下错误: 无法读取未定义的属性“apply”

有人能解释一下为什么吗

问候
Henning

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

与:

您将返回的
函数(x,y){}
函数(在
original
上具有闭包)指定给
o.method
,并将原始
o.method
作为参数传递

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


如果调用
函数(原始){}
时没有参数
(函数(原始){})(
,则
原始
未定义的
原始。应用
将导致您发布的错误。

经过一些更改,您的代码是正确的:

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()用法的更多信息,请阅读本文:

可能是重复的,您没有将参数传递给外部函数。@SLaks:对不起,我已经更新了我的帖子。谢谢您的回答。所以在最后两个论题中,我定义了参数original的参数?
o.method(2,3)