2014-11-06 13 views
6

Ho una funzione simile:ottenere JavaScript argomenti della funzione genitore

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

all'interno module.build Voglio ottenere gli argomenti automaticamente del genitore come:

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

So che avrei potuto fare qualcosa di simile:

module.build.apply(this, arguments); 

ma mi chiedevo se c'era un modo migliore. qualche idea?

+0

Non sono sicuro di aver compreso l'uso di 'define()'. Impossibile trovarlo su MDN. Stai usando requireJS? Se sì, potresti aggiungere quel tag? Ri: la tua domanda, mi piacerebbe saperlo. I miei pensieri sono che forse c'è qualcosa da fare con la creazione di Classi, ma sono relativamente debole sulla mia comprensione di tutto ciò che le Classi possono fare. Forse sulla falsariga di 'module = new myClass; module.define (args); module.build(); '? – philtune

+0

Il codice sopra funziona? Perché mi sembra strano che tu chiami 'module.build()' che è 'indefinito' dato che è il costruttore che aggiunge il metodo di build – axelduch

+0

@aduch whoops, stavo prototipando un codice di esempio. Risolto ora – amcdnl

risposta

7

C'è un modo per fare questo, illustrata in questo esempio (http://jsfiddle.net/zqwhmo7j/):

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

Si tratta di non-standard e comunque non può funzionare in tutti i browser:

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

Dovresti cambiare la tua funzione in questo modo:

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

Inoltre, quando si utilizza la modalità rigorosa (che è generalmente consigliata), non è possibile accedere a chiamante, chiamata o anche argomenti. – axelduch

+0

ottimo punto per aggiungere @aduch :) – mattr

+0

Dopo aver avuto la parola chiave, ho trovato altri riferimenti http://stackoverflow.com/questions/280389/how-do-you-find-out-the-caller-function-in -javascript – amcdnl

Problemi correlati