2014-11-06 30 views
6

我有一個功能,如:的JavaScript得到父母的函數參數

define(['module', 'controller'], function(module, controller){ 
    (new module).build(); 
}); 

module.build我想自動獲取父樣的參數:

module = function(){ 
    this.build = function(args){ 
     // make args the arguments from caller (define) fn above 
    }; 
}; 

我知道我可以做這樣的事情:

module.build.apply(this, arguments); 

但我想知道是否有更好的方法。有什麼想法嗎?

+0

我不確定我是否理解你使用define()。在MDN上找不到它。你在使用requireJS嗎?如果是這樣,你可以添加標籤嗎? Re:你的問題,我也想知道。我的想法是,也許有些事情需要創建類,但是我對理解類可以做的所有事情相對較弱。也許沿着'module = new myClass; module.define(參數); module.build();'? – philtune 2014-11-06 13:51:38

+0

上面的代碼是否工作?因爲我覺得你調用'module.build()'是'undefined',因爲它是構造函數,添加了構建方法 – axelduch 2014-11-06 13:55:19

+0

@aduch哎呀,我原型化了一些示例代碼。現在修復 – amcdnl 2014-11-06 14:04:11

回答

7

有辦法做到這一點,在這個例子中所示(http://jsfiddle.net/zqwhmo7j/):

function one(){ 
    two() 
} 
function two(){ 
    console.log(two.caller.arguments) 
} 
one('dude') 

然而非標準的,不能在所有的瀏覽器:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller

你將不得不像這樣改變你的功能:

module = function(){ 
    this.build = function build(args){ 
     // make args the arguments from caller (define) fn above 
    console.log(build.caller.arguments) 
    }; 
}; 
+2

另外,當使用嚴格模式(通常推薦)時,你不能訪問調用者,被調用者甚至參數。 – axelduch 2014-11-06 14:23:39

+0

偉大的點添加@aduch :) – mattr 2014-11-06 14:33:51

+0

後我有關鍵字,我發現一些更多的參考http://stackoverflow.com/questions/280389/how-do-you-find-out-the-caller-function-in -javascript – amcdnl 2014-11-06 14:39:56