[英]How do I properly pass arguments more than once in a javascript object literal?
我有一个与此类似的对象文字:
var test = {
myFunc1: function () {
for (var i = 0, j = arguments.length; i < j; i++) {
alert('myFunc1: ' + arguments[i]);
}
},
myFunc2: function () {
for (var i = 0, j = arguments.length; i < j; i++) {
alert('myFunc2: ' + arguments[i]);
}
this.myFunc1.apply(this.myFunc2, arguments);
},
myFunc3: function () {
for (var i = 0, j = arguments.length; i < j; i++) {
alert('myFunc3: ' + arguments[i]);
}
this.myFunc2.apply(this.myFunc3, arguments);
}
}
当我调用“ myFunc3”时,我希望它通过传递给“ myFunc3”的所有参数来调用“ MyFunc2”。 这正在按预期方式工作。
当我调用“ myFunc3”时,我希望它使用所有传递的参数来调用“ myFunc2”,并且希望使用最初传递给“ myFunc3”的所有传递的参数来调用myFunc1。
test.myFunc3('a', 'b');
当前,当我打电话给我时,我得到4个警报框,其中2个代表myFunc3,另外2个代表myFunc2。 然后我得到一个错误:
Uncaught TypeError: Cannot call method 'apply' of undefined
如果我需要在一个对象中传递一个以上级别的参数集,该怎么办? 有没有更好的更正确的方法来做到这一点?
这是一个jsFiddle进行演示。
http://jsfiddle.net/taggedzi/fmPAQ/2/
提前致谢。 仅纯JavaScript,请勿使用jquery。 需要跨浏览器和平台工作。
这是因为this
在myFunc2
已不再test
,但this.myFunc3
。 这是由myFunc3
在调用this.myFunc2.apply(this.myFunc3, arguments);
。
为了可视化,您的myFunc2
正在执行:
(this.myFunc3).myFunc1(...);
//instead of
(this).myFunc1(...);
您只应传递this
以便将其与this
相同的功能用于其他功能。
this.myFunc2.apply(this, arguments);
试试这个:它有效。 您应该使用它而不是this.FuncX
var test = {
myFunc1: function () {
for (var i = 0, j = arguments.length; i < j; i++) {
alert('myFunc1: ' + arguments[i]);
}
},
myFunc2: function () {
for (var i = 0, j = arguments.length; i < j; i++) {
alert('myFunc2: ' + arguments[i]);
}
this.myFunc1.apply(this, arguments);
},
myFunc3: function () {
for (var i = 0, j = arguments.length; i < j; i++) {
alert('myFunc3: ' + arguments[i]);
}
this.myFunc2.apply(this, arguments);
}
};
test.myFunc3('a', 'b');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.