有了教学兴趣,我想知道在对象创建时模拟自动增量变量的正确方法。
我把你放在我已经有一个封装产品的场景中"""""""""作为具有隐藏属性的对象。
(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提前致谢。
答案 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。