隐藏其他函数的静态变量

时间:2013-11-16 02:52:11

标签: javascript

我无法在创建每个新对象时让我的函数增加用户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但阻止其他功能更改它?

2 个答案:

答案 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());