ES5 Javascript封装对象自动增量id

时间:2018-05-07 23:56:49

标签: javascript ecmascript-5

有了教学兴趣,我想知道在对象创建时模拟自动增量变量的正确方法。

我把你放在我已经有一个封装产品的场景中"""""""""作为具有隐藏属性的对象。



(function() {

  var Product = (function() {
    function Product(name, description) {

      this.getName = function() {
        return name;
      };
      this.getDescription = function() {
        return description;
      };
      this.getProductId = function() {
        return productId;
      }
    }
    return Product;
  }());

  var p = new Product("Product1", "Should have id=1");
  var q = new Product("Product2", "Should have id=2");
  console.log(p);
  console.log(q);
})();




在这段代码中,添加计数器的最佳方式是什么或者什么是每次我创建Product的新实例时,productId将具有连续值,并且每个对象都保留自己的。同时,只能通过方法getProductId()。

访问所述Id

提前致谢。

1 个答案:

答案 0 :(得分:5)

您可以使用Closures

(function() {

  var Product = (function() {
    var nextId = 1;

    function Product(name, description) {
      var productId = nextId;
      nextId += 1;
      this.getName = function() {
        return name;
      };
      this.getDescription = function() {
        return description;
      };
      this.getProductId = function() {
        return productId;
      }
    }
    return Product;
  }());

  var p = new Product("Product1", "Should have id=1");
  var q = new Product("Product2", "Should have id=2");
  console.log(p.getProductId());
  console.log(q.getProductId());
})();

如果将函数包装在另一个函数中,则内部函数可以访问外部函数的所有变量。当您创建新的Product时,会调用function Product(name, description);每次将nextId递增1.如果您想在闭包上看到更多示例,可以查看this stackoverflow answer