在 JS 中将"this"指针从对象构造函数传递到setter/getter



对于使用原型设计模式相当新,所以我有一个关于为多个构造函数变量创建setter/getter的最有效方法的快速问题。

假设我有一个"trip"对象:

function trip(){
    this.numberOfDays = 0
    this.price = 0
    this.activites = [] 
    this.bPacks = []
    this.pPacks = []
}

现在活动,bPacks和pPacks的setter基本上都做同样的事情。它们将添加或删除与它们相关联的数组。

而不是为这些属性编写6个单独的setter,例如:

trip.prototype.addActivity = function(itemToAdd){
  var index = this.activites.push(itemToAdd)
}
trip.prototype.addBPack = function(itemToAdd){
      var index = this.bPack.push(itemToAdd)
    }

等等……

是否可以这样做:

trip.prototype.addPacksOrActivity = function(item,typeOfItem){
    this.typeOfItem.push(item);
} 

指向我们想要推送到的trip对象的特定属性?

欢迎任何关于更有效地构建setter/getter方法的建议,但我试图避免从ES6转译,因此首选ES5类型的答案

是的,您可以使用一个简单的循环来做到这一点:

["activities", "bPacks", "pPacks"].forEach(function(typeOfItem) {
     var methodName = "add"+typeOfItem[0].toUpperCase()+typeOfItem.slice(1);
     Trip.prototype[methodName] = function(item) {
         this[typeOfItem].push(item);
     };
});

注意typeOfItem的括号符号和闭包的使用。

最新更新