2016-08-02 36 views
0

Warum werden Benachrichtigungen nicht an einen Variablenwert gebunden? Auch, warum nicht bindet eine uncleared Variable wie warrior.bind({'name': 'Rob3'}, 'ninja')Warum bindet Notice Updates nicht an eine Variable?

function warrior(kind){ 
    console.log(this.name); 
} 

var me = {'name': 'Rob'}  
var ninja = warrior.bind(me, "ninja"); 
ninja(); 
me = {'name': 'Rob2'}; 
ninja(); 

Antwort

1

akzeptieren Wenn Sie me = {'name': 'Rob2'}; dies schafft ein völlig neues Objekt ausgeführt und weist sie in die me Variable. Die ninja Funktion ist immer noch an die alte me gebunden. Stattdessen müssen Sie das gleiche Objekt halten, sondern nur seine Eigenschaften ändern, wie folgt aus:

me.name = 'Rob2'; 

nicht sicher, was das Problem ist ein Objektliteral in der warrior.bind Funktion bei der Verwendung, das funktioniert für mich, aber Sie wollen in der Lage sein, das Objekt später zu ändern.

+0

ya mein Fehler auf den zweiten Teil, es funktioniert jetzt. Ich muss es einfach falsch eingegeben haben. – Rob

1

Tatsächlich erstellen Sie ein neues Objekt und weisen die Referenz dieses neu erstellten Objekts me Variable zu. Sie sollten Eigenschaften aktualisieren, wenn Sie die Bindung weiterhin verwenden möchten, anstatt ein neues Objekt zu erstellen.

function warrior(kind){ 
    console.log(this.name); 
} 

var me = {'name': 'Rob'}  
var ninja = warrior.bind(me, "ninja"); 
ninja(); 
me.name = 'Rob2'; // Do not create new object. Update already existing one. 
ninja();