Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何正确地在javascript对象文本中多次传递参数?_Javascript_Oop - Fatal编程技术网

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

如何正确地在javascript对象文本中多次传递参数?,javascript,oop,Javascript,Oop,我有一个与此类似的对象文字: 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.len

我有一个与此类似的对象文字:

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);
    }
}
当前,当我调用它时,我得到4个警报框,2个用于myFunc3,2个用于myFunc2。然后我得到一个错误:

Uncaught TypeError: Cannot call method 'apply' of undefined 
如果我需要在一个对象中传递一组超过一层的参数,我该如何做呢?有没有更好更正确的方法

下面是一个要演示的JSFIDLE


提前谢谢。仅限纯javascript,请不要使用jquery。需要跨浏览器和平台工作

这是因为
myFunc2
中的
this
不再是
test
,而是
this.myFunc3
。这是在调用
This.myFunc2.apply(This.myFunc3,参数)时由您的
myFunc3
提供的

要可视化,您的
myFunc2
正在执行以下操作:

(this.myFunc3).myFunc1(...);

//instead of

(this).myFunc1(...);
您应该只传入
,以便对其他函数使用相同的

this.myFunc2.apply(this, arguments);

这是因为
myFunc2
中的
this
不再是
test
,而是
this.myFunc3
。这是在调用
This.myFunc2.apply(This.myFunc3,参数)时由您的
myFunc3
提供的

要可视化,您的
myFunc2
正在执行以下操作:

(this.myFunc3).myFunc1(...);

//instead of

(this).myFunc1(...);
您应该只传入
,以便对其他函数使用相同的

this.myFunc2.apply(this, arguments);

试试这个:它很管用。您应该使用这个而不是这个.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');
var测试={
myFunc1:函数(){
for(var i=0,j=arguments.length;i
试试这个:它很有效。您应该使用这个而不是这个.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');
var测试={
myFunc1:函数(){
for(var i=0,j=arguments.length;i
不是我,但这与@Josephdreamer的回答有何不同?我不理解他的解释。我自己检查过了。他说的基本上是一样的。是的,有解释的代码框架比完全没有解释的代码要好。不是我,但这与@JosephDreamer的答案有什么不同?我不理解他的解释。我自己检查过了。他说的基本上是一样的。是的,有解释的代码框架比完全没有解释的代码要好。