带着教学兴趣,我想知道一种正确的方法来模拟对象创建的自动增量变量。
我将您放置在这样的场景中:我将封装的Product“class”作为一个具有隐藏属性的对象。
(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()方法访问。
提前谢谢。
发布于 2018-05-08 00:02:48
你可以利用闭包
(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。如果您想看到更多关于闭包的示例,可以查看这个堆叠溢出的答案。
https://stackoverflow.com/questions/50223951
复制相似问题