2013-07-08 25 views
5

Quando si passa un metodo oggetto come argomento di funzione, devo usare `bind 'per assicurarmi che il contesto (questo) del metodo sia impostato correttamente. Poi ci sono molti legami nel mio codice ... È questo il modo pulito per scrivere il codice JS? Qual è il modello di progettazione consigliato per i metodi di passaggio? Forse dovrei passare l'intero oggetto o ridisegnare il mio oggetto?Come passare i metodi degli oggetti JS?

Grazie.

Per il vostro riferimento, ho incollato il mio codice qui. Questo non è sicuramente un buon codice. Per esempio, probabilmente, potrei voler usare istruzioni multi-sql piuttosto che chiamarle una per una.

function insertDB(response, postData) { 
    var mysql  = require('mysql'); 
    var async  = require('async'); 
    var connection = mysql.createConnection({ 
    host  : 'localhost', 
    user  : 'user', 
    password : 'pswd', 
    database : 'mydb', 
    }); 

    async.series([ 
    connection.connect.bind(connection), 
    async.apply(connection.query.bind(connection), 
     "CREATE TABLE IF NOT EXISTS concepts ("+ 
     "name VARCHAR(64) NOT NULL,"+ 
     "priority INT NOT NULL DEFAULT 0,"+ 
     "date DATE NOT NULL,"+ 
     "notes VARCHAR(256),"+ 
     "PRIMARY KEY (name))"), 
    async.apply(connection.query.bind(connection), 
     "INSERT INTO concepts VALUES('" + 
     postData["word"] + "',0,CURDATE(),'')"), 
    connection.end.bind(connection) 
    ], 
    function(err, result) { 
    if (err) console.error(err); 
    }); 
} 
+2

Vuoi condividere il codice corrente in modo che potremmo discutere su come potrebbe essere migliorato al fine di evitare la ripetizione del codice? –

+0

'function (oggetto, metodo, argomenti) {oggetto [metodo] .apply (oggetto, argomenti); } ' – mishik

+3

Forse questo è più adatto per [codereview] (http://codereview.stackexchange.com). –

risposta

1

È possibile utilizzare chiamata o applicare per fare questo, entrambi permettono di impostare la portata e di passare eventuali args che si desidera. La differenza tra chiamata e applicare è chiamata prende separati da virgola arguements quali:

connection.connect.call(connection, arg1, arg2, arg2);

e applicare accetta un array di args come questo:

var args = [ arg1, arg2, arg3 ];
connection.connect.apply(connection, args);

Problemi correlati