2016-03-22 17 views
0

Ich lese einige Knoten-Code von meinem Ex-Kollegen geschrieben. Ich bin kein fähiger Javascript-Programmierer, aber ich sehe viel Code, der zu mir wie syntaktischer Zucker aussieht. für zB:Javascript binde Syntax

_.bind(this._work, this), 

ist nicht genau das gleiche wie der Aufruf von

this._work 
+0

'bind' und' extend' sind beliebte Unterstreichungsverfahren (unterstreichen eine Bibliothek js ist). Siehe [_.bind] (http://underscorejs.org/#bind) und [_.extend] (http://underscorejs.org/#extend) für Details – csum

+0

Ich weiß das. Ich frage, ob über Zeilen von Code sie brauchen? – konquestor

+0

Ob .bind() benötigt wird, hängt vom Kontext ab, und Sie haben den Kontext nicht angezeigt. Das Aufrufen von .bind, ohne seinen Rückgabewert zu verwenden, ruft die Funktion .work() nicht auf. Wenn der Rückgabewert an eine andere Funktion als Callback übergeben wird, benötigen Sie *. * * .bind(). – nnnnnn

Antwort

2

Dadurch wird eine Kopie der Funktion mit this auf das richtige Objekt gebunden. Dies kann nützlich sein, wenn Sie Funktionen weitergeben.

function log(msg) { 
 
    document.querySelector('pre').innerText += msg + '\n'; 
 
} 
 

 
var _ = { 
 
    bind: function(f, self) { 
 
    // Simplified bind implementation 
 
    return f.bind(self); 
 
    } 
 
}; 
 

 
function runFunc(f) { 
 
    f(); 
 
} 
 

 
var obj = { 
 
    myName: 'Mike', 
 
    printName: function() { 
 
    log(this.myName); 
 
    } 
 
}; 
 

 
obj.printName(); // "Mike" 
 
runFunc(obj.printName); // undefined 
 
runFunc(_.bind(obj.printName, obj)); // "Mike"
<pre></pre>