2015-02-15 3 views
0

Учитывая продукт может иметь несколько атрибутов, такие как имя, цена, единица учет, описание и так далее - в дальнейшем станет довольно долго наматывается, чтобы описать модель продукта ...альтернатива многократного Object.defineProperty

function Product(data) { 

    var productData = data || {}; 

    Object.defineProperty(this, "sku", { 
     get: function() { 
      return productData.sku; 
     } 
    }); 

    Object.defineProperty(this, "name", { 
     get: function() { 
      return productData.name; 
     } 
    }); 

    Object.defineProperty(this, "price", { 
     get: function() { 
      return productData.price; 
     } 
    }); 
} 

module.exports = Product; 

Какие альтернативы есть в javascript для этого и как это нормально обрабатывается?

+2

Как насчет ['Object.defineProperties()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties)? – Pointy

+1

Вы можете использовать цикл для определения каждого свойства, вместо того чтобы писать одну и ту же функцию несколько раз. – levi

+0

Почему вы используете 'Object.defineProperty' и сеттеры вообще? – Bergi

ответ

2

Вы можете использовать один цикл, чтобы определить все свойства:

var self = this; 
Object.keys(productData).forEach(function(prop){ 
    Object.defineProperty(self, prop, { 
     get: function() { 
      return productData[prop]; 
     } 
    }); 
}); 

Demo

1

Pointy скорее заслуживает точки здесь с Object.defineProperties -

function Product(data) { 

    var productData = data || {}; 

    Object.defineProperties(this, 
     "sku": { 
      get: function() { 
      return productData.sku; 
      } 
     }, 
     "name": { 
      get: function() { 
      return productData.name; 
      } 
     }, 
     "price", { 
      get: function() { 
      return productData.price; 
     } 
    }); 
} 

module.exports = Product; 

поддержки рядом идентичен Object.defineProperty поэтому нет никакой реальной причины не использовать этот метод, где определение нескольких свойств в одном и том же t IME.

+0

правильный путь. Даже «правильный» ответ более динамичен. должен был дать тебе большие пальцы, я ненавижу видеть неправильные вещи как правильные вещи –

Смежные вопросы