JavaScript类最佳实践?

Gol*_*Aal 5 javascript oop class

我目前正在研究在JavaScript中构建类的不同模式.但不管我看到什么模式,还有一些我不太确定的事情.

var ItemManager = (function()
{
    var p = function()
    {
        this.items= [];
    };

    p.prototype.addItem = function(item)
    {
        var self = this;    
        self.items.push(item);
    };

    return p;
}());
Run Code Online (Sandbox Code Playgroud)

我创建了简单的类ItemManager,这个类得到了addItem函数,用于将任何项添加到集合中.现在我真的不希望表示集合的变量项是公共的,这个变量应该是私有的,但我没有看到任何可能的方法来使用prototyped方法来访问私有变量.

那么这种情况下的最佳做法是什么?只是不使用私有变量?

aga*_*aga 6

var ItemManager = function() {
    var items = [];

    return {
           addItem : function(item) {   
               items.push(item);
           },
           removeItem : function() {
                return items.pop();
           }
     }
};

var myItemManager = new ItemManager();
Run Code Online (Sandbox Code Playgroud)

items变量变成执行后隐藏的ItemManager功能,但addItemremoveItem仍共享访问items.有关进一步调查的内容,请参阅Douglas Crockford关于JavaScript中私有变量的文章.


tom*_*ker -1

正如 GoldenerAal 提到的,它们不称为类,而是您拥有的函数

var ItemManager = function (){
..
...
...

};
Run Code Online (Sandbox Code Playgroud)

你可以有:

function ItemManager(){
this.items = [];

function addItem(item){
...
};
};
Run Code Online (Sandbox Code Playgroud)

然后,仅当您需要时,您才可以创建 ItemManager 的实例:

var itemManager = new ItemManager();
itemManager.addItem(<something here>);
Run Code Online (Sandbox Code Playgroud)

http://javascript.crockford.com/private.html 函数内的变量仅具有该函数的作用域,该变量不是全局变量(静态变量)。