我无法在创建每个新对象时让我的函数增加用户ID,但也阻止其他函数更改它。
function User(u_name) {
this.user_name = u_name;
this.user_id = User.next_user_id++;
}
User.next_user_id = 1;
user1 = new User('john');
user2 = new User('jane');
如果我将next_user_id移动到函数User var next_user_id
,那么它会在每个新对象上重置,这不是我想要的。
如何为每个新对象增加user_id但阻止其他功能更改它?
答案 0 :(得分:4)
你应该尝试查找closures ...
var User = (function()
{
var next_user_id = 1;
return function(u_name)
{
this.user_name = u_name;
this.user_id = next_user_id++;
}
})()
user1 = new User('john');
user2 = new User('jane');
答案 1 :(得分:0)
您需要将变量附加到函数的原型。
尝试:
User.prototype.next_user_id = 1;
如果您只想控制对(C#like)内部的访问,则需要将其转换为属性。
var $Mynamespace$User$Count = 0;
function $Mynamespace$User$IncrementUser() {
$Mynamespace$User$Count++;
};
var User = function(name){
this.name = name;
$Mynamespace$User$IncrementUser();
};
User.prototype = {
GetUserCount: function() { return $Mynamespace$User$Count; }
};
var jane = new User("jane");
var john = new User("john");
alert(User.prototype.GetUserCount());
alert(jane.GetUserCount());