繁体   English   中英

如何在javascript对象文字中多次正确传递参数?

[英]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。 需要跨浏览器和平台工作。

这是因为thismyFunc2已不再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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM