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)