私はこのコードを動作させる方法を理解しようと少し怒ってきました。私の目標は、larry eats pie, larry eats candy, larry eats cake
の出力を、alice
オブジェクト内の関数eats
をlarry
オブジェクトにバインドすることです。以下のコードで私が望むのは、alice.eats
関数をlarryオブジェクトにバインドするとlarry
をthis.name
とし、その関数をlarryFoods
の配列で適用すると、それぞれの引数に対してlarry eats + [food]
が生成されることを期待します。グローバルコンテキストで動作するJavascriptでのバインディング関数
//-----------------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);
私はforEachの機能は、私はこの問題を解決するbind
を期待していた理由であるグローバルコンテキストで動作することを想定しています。どんな洞察も大歓迎です。
注意を。 – elclanrs