我正在尝试了解.apply方法。因此,我创建了以下代码:
pr1
我认为最后一个打开和关闭括号可以为空,因此o.method方法是自动调用的。但是用空括号
pr1
我收到以下错误: 无法读取未定义的属性“应用”
有人可以解释一下为什么吗?
亲切的问候 亨宁
答案 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) {}
函数封闭在original
到o.method
上,并将原始o.method
作为参数。
如果您现在写o.method(1,2)
,则调用返回的function(x, y) {}
。
如果您在没有参数function(original) {}
的情况下调用了(function(original) {})()
,则original
为undefined
并且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