簡體   English   中英

箭頭 function 避免綁定

[英]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 方法。 我很感激關於兩件事的一些建議。

  1. add_action 使用綁定,所以“this”指的是動作 function 中的動物 - 有沒有辦法用箭頭 function => 所以不需要綁定?

  2. 我認為永遠只有一個“世界”,所以這就是為什么我從世界的 object 文字開始,而不是讓世界成為 class。 是否有另一種“最佳實踐”方式可以做到這一點,也許使用類? 如果是這樣,以另一種方式做有什么真正的優勢嗎?

  1. add_action 使用綁定,所以“this”指的是動作 function 中的動物 - 有沒有辦法用箭頭 function => 所以不需要綁定?

如果您想在操作 function 中使用this來指代動物,則不是。

  1. 我認為永遠只有一個“世界”,所以這就是為什么我從世界的 object 文字開始,而不是讓世界成為 class。 是否有另一種“最佳實踐”方式可以做到這一點,也許使用類? 如果是這樣,以另一種方式做有什么真正的優勢嗎?

如果world是 singleton,那么除了你已經完成的事情之外,通常不需要做任何事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM