Sam*_*Sam 1 javascript ecmascript-5
有了教学兴趣,我想知道一种正确的方法来模拟对象创建的自动增量变量.
我把你放在我有一个封装的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);
})();Run Code Online (Sandbox Code Playgroud)
在这段代码中,添加计数器的最佳方式是什么或者什么是每次我创建Product的新实例时,productId将具有连续值,并且每个对象都保留自己的.同时表示Id只能通过方法getProductId()访问.
提前致谢.
您可以使用闭包:
(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());
})();Run Code Online (Sandbox Code Playgroud)
如果将函数包装在另一个函数中,则内部函数可以访问外部函数的所有变量.当你创建一个新的Product,function Product(name, description)被称为; 每次将nextId递增1.如果你想在闭包上看到更多的例子,你可以看一下这个stackoverflow的答案.