[英]Arrow function to avoid bind
var world = {
animals: {},
add_animal: function(options) {
this.animals[options.name] = {
name: options.name,
sound: options.sound,
actions: {},
add_action: function(action_name, action_function) {
this.actions[action_name] = action_function.bind(this);
}
}
}
};
world.add_animal({name: "dog", sound: "bark"});
world.animals.dog.add_action("speak", function() {
alert("I am a " + this.name + ". I " + this.sound + ".");
});
world.animals.dog.actions.speak();
這是我幾年前編寫的腳本的簡化版本,我想對其進行更新。 它創建了一個包含動物集合和 add_animal 方法的世界 object。 每個動物都有一個 add_action 方法。 我很感激關於兩件事的一些建議。
add_action 使用綁定,所以“this”指的是動作 function 中的動物 - 有沒有辦法用箭頭 function => 所以不需要綁定?
我認為永遠只有一個“世界”,所以這就是為什么我從世界的 object 文字開始,而不是讓世界成為 class。 是否有另一種“最佳實踐”方式可以做到這一點,也許使用類? 如果是這樣,以另一種方式做有什么真正的優勢嗎?
- add_action 使用綁定,所以“this”指的是動作 function 中的動物 - 有沒有辦法用箭頭 function => 所以不需要綁定?
如果您想在操作 function 中使用this
來指代動物,則不是。
- 我認為永遠只有一個“世界”,所以這就是為什么我從世界的 object 文字開始,而不是讓世界成為 class。 是否有另一種“最佳實踐”方式可以做到這一點,也許使用類? 如果是這樣,以另一種方式做有什么真正的優勢嗎?
如果world
是 singleton,那么除了你已經完成的事情之外,通常不需要做任何事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.