通过"这个"从JS中的对象构造函数到setter / getter的指针

时间:2016-08-31 14:07:39

标签: javascript design-patterns prototype getter-setter

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

说我有一次"旅行"对象:

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

现在,活动,bPack和pPacks的设置者都主要做同样的事情。他们将添加或删除与其关联的数组。

所以不要为这些属性编写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);
} 

我们在哪里定位我们要推送到的旅行对象的特定属性?

欢迎任何有关建立制定者/获取者的更有效方法的建议,但我试图避免从ES6转发,因此优先考虑ES5类型的答案。

1 个答案:

答案 0 :(得分:0)

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

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

请注意使用bracket notationclosure over typeOfItem