2013-12-19 10 views
0

我有一個對象字面與此類似:如何在JavaScript對象文字中多次正確傳遞參數?

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」我希望它稱之爲「myfunc2所」用傳遞給「myFunc3」的所有參數。這是按預期工作的。

當我調用「myFunc3」時,我希望它使用所有傳遞的參數調用「myFunc2」,並且我希望myFunc1被所有傳遞給「myFunc3」的傳遞參數調用。

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請。需要跨瀏覽器和平臺工作。

回答

4

這是因爲myFunc2中的this不再是test而是this.myFunc3。當您致電this.myFunc2.apply(this.myFunc3, arguments);時,這由您的myFunc3提供。

要直觀,您myFunc2做:

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

//instead of 

(this).myFunc1(...); 

你應該只this所以你正在使用其他的功能相同this通過。

this.myFunc2.apply(this, arguments); 
0

試試這個:它的工作原理。您應該使用此代替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'); 
+0

誰投這個?有用。 –

+0

這不是我,但這與@ JosephtheDreamer的回答有何不同? –

+0

我不明白他的解釋。我檢查了我自己。這與他所說的基本相同。 –