首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ES5 Javascript封装的对象自动增量id

ES5 Javascript封装的对象自动增量id
EN

Stack Overflow用户
提问于 2018-05-07 23:56:49
回答 1查看 159关注 0票数 1

带着教学兴趣,我想知道一种正确的方法来模拟对象创建的自动增量变量。

我将您放置在这样的场景中:我将封装的Product“class”作为一个具有隐藏属性的对象。

代码语言:javascript
复制
(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);
})();

在这段代码中,添加计数器的最佳方式是什么,以便每次创建产品的新实例时,productId都会有连续的值,而每个对象都保留自己的值。同时,所述Id只能通过getProductId()方法访问。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-08 00:02:48

你可以利用闭包

代码语言:javascript
复制
(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。如果您想看到更多关于闭包的示例,可以查看这个堆叠溢出的答案

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50223951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档