2012-02-23 11 views
5
var problemtest = function() { 

    var parameters; 

    return function (parameters) { 
     parameters = parameters; 
    } 
} 

var mysolutiontest = function() { 

    var parameters; 

    return function (parametersIn) { 
     parameters = parametersIn; 
    } 
} 

Questa è più una domanda di convenzione JavaScript.Convenzione JavaScript: Come si assegnano gli argomenti all'ambito principale

Di solito ho un codice simile a quello in alto. Una funzione accetta gli argomenti e li assegna all'ambito principale. Tuttavia, non posso usarlo come in problemtest, poiché gli argomenti parameters nascondono lo parameters da problemtest.

Nella programmazione OO è possibile utilizzare this, ma in JavaScript non è possibile utilizzare this, pertanto di solito viene implementata una soluzione simile a mysolutiontest. Tuttavia, non sono pienamente soddisfatto di questa soluzione. C'è un modo migliore per farlo?

risposta

2

Io di solito uso _parameters come una convenzione. Questo deriva dal mio passato Java. Questo non è isolato dal tuo esempio o da Javascript. Qualsiasi linguaggio che non ti obbliga a qualificare le variabili di qualsiasi ambito che racchiude ti porterà allo stesso problema.

var mysolutiontest = function() { 
    var _parameters; 

    return function (parameters) { 
    _parameters = parameters; 
    } 
} 

Ho anche visto persone usare p_parameters per nomi di argomenti di funzioni di qualità. Questo non è uno dei miei preferiti tho.

var mysolutiontest = function() { 
    var parameters; 

    return function (p_parameters) { 
    parameters = p_parameters; 
    } 
} 

Il mio 2c.

4

Se le funzioni devono condividere alcune proprietà, poi assegnarli a un oggetto è un elegante e comune modello:

var object = { 

    property: ['item'], 

    methodOne: function() { 
     console.log(this.property); 
    }, 

    methodTwo: function() { 
     console.log(this.property); 
    } 

}; 

object.methodOne(); // ['item'] 
object.methodTwo(); // ['item'] 

Per ulteriori informazioni su come 'questo' funziona all'interno di un oggetto - http://javascriptweblog.wordpress.com/2010/08/30/understanding-javascripts-this/

+0

+1, ma dovresti probabilmente sottolineare che l'uso di 'this.property' può causare un comportamento inaspettato a coloro che non hanno familiarità con il funzionamento degli oggetti JS. Esempio: usa 'object.methodOne' come gestore di eventi. –

+0

Concordato. Ho modificato e aggiunto l'eccellente post di Angus Croll sull'argomento –

+0

@ LiorCohen-'<... onclick =" function() {object.methodOne();} "...>'. – RobG

Problemi correlati