Ich habe mich selbst ein bisschen verrückt fahren versucht, herauszufinden, wie dieser Code funktioniert. Mein Ziel ist es, den Ausgang larry eats pie, larry eats candy, larry eats cake
durch Binden der Funktion eats
innerhalb des Objekts alice
an das Objekt larry
zu erzeugen. Meine Hoffnung mit dem Code unten war, dass Bindung der alice.eats
Funktion an das Larry-Objekt larry
als this.name
verwenden würde, und anschließend diese Funktion mit einem Array von larryFoods
anwenden, würde ich hoffen, dass es larry eats + [food]
für jedes Argument produzieren würde.Binding-Funktionen in Javascript, die im globalen Kontext funktionieren
//-----------------Does not work--------------//
var alice = {
name: "alice",
speak: function(){
console.log("Hi, I'm " + this.name);
},
eats : function(){
var theArgs = Array.prototype.slice.call(arguments);
theArgs.forEach(function(arg){
console.log(this.name + " eats " + arg);
});
}
};
var larry = {
name: "larry"
};
var larrySpeak = alice.speak.bind(larry);
larrySpeak();
var larryFoods = [" pie", " candy", " and cake"];
var larryEats = alice.eats.bind(larry);
larryEats.apply(larryFoods);
Ich gehe davon aus, dass die forEach Funktion im globalen Kontext arbeitet, weshalb ich bind
hatte gehofft, das Problem lösen würde. Jeder Einblick wäre sehr willkommen.
Beachten Sie, dass die 'forEach' Rückruf ein neues' this' hat, so dass Sie den Kontext dort verloren. – elclanrs