ES5 Javascript id автоинкремента инкапсулированного объекта - PullRequest
0 голосов
/ 08 мая 2018

С дидактическим интересом я хотел бы знать, как правильно моделировать переменную автоинкремента при создании объекта.

Я помещаю вас в сцену, где я получил инкапсулированный продукт "" "" класс "" "" как объект со скрытыми атрибутами.

(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 будет иметь последовательное значение икаждый объект сохраняет свой.В то же время указанное Id доступно только через метод getProductId ().

Заранее спасибо.

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете использовать Закрытия :

(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. Если вы хотите увидеть еще много примеров замыканий, вы можете взглянуть на этот ответ на стекопоток .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...