替代多个Object.defineProperty

时间:2015-02-15 19:24:09

标签: javascript

鉴于产品可能具有多个属性,例如名称,价格,sku,描述等等,以下内容对于描述产品模型将会非常冗长...

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 个答案:

答案 0 :(得分:2)

您可以使用单个循环来定义所有属性:

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

Demo

答案 1 :(得分: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几乎相同,因此没有理由不在同时定义多个属性的情况下使用此方法。