如何在javascript类中创建私有静态数组?

时间:2017-05-22 20:01:16

标签: javascript arrays

我想在javascript类中创建一个静态数组,为此我做了:

var Manager = (function () {    
    function Manager() {
      var ubications =  new ArrayList();
      this.ubicationsArray = function () {  
        return(ubication);
      };
    }

    Manager.prototype.addUbication = function (ubication) {
        Manager.ubicationsArray().add(ubication);
    };
    Manager.prototype.getUbication = function (index) {
        return Manager.ubicationsArray().get(index);
    };
    Manager.prototype.sizeOfUbications = function () {
        return Manager.ubicationsArray().size();
    };
    return Manager;
}());
Manager["__class"] = "Manager";

其中ubications是静态数组,函数ubicationsArray是访问数组的公共函数。

我尝试将此代码用于:

var ubication = new Ubication(123,456);
var manager = new Manager();
manager.addUbication(ubication);
alert(manager.sizeOfUbications());  

但我收到了这个错误:

Uncaught TypeError: Manager.ubicationsArray is not a function

在javascript代码中使用静态数组的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

在构造函数中,this.ubicationsArray为对象的实例赋予属性,而不是构造函数本身。

也许你想要这样的东西:

function Manager() {
}
var ubications =  new ArrayList();
Manager.ubicationsArray = function () {
  return(ubication);
};

请注意,此属性并非真正"私有"。这将是更私密的:

var Manager = (function () {    
    function Manager() {
    }

    var ubications =  new ArrayList();

    Manager.prototype.addUbication = function (ubication) {
        ubications.add(ubication);
    };
    Manager.prototype.getUbication = function (index) {
        return ubications.get(index);
    };
    Manager.prototype.sizeOfUbications = function () {
        return ubications.size();
    };
    return Manager;
}());
Manager["__class"] = "Manager";

答案 1 :(得分:0)

目前,JavaScript只能在功能范围方面做隐私。

function Manager () {
}

Manager.prototype = (function (){
  var ubications = [];

  return {
    addUbication: function (u) {
      ubications.push(u);
    },

    getUbication: function (index) {
      return ubications[index];
    },

    sizeOfUbications: function () {
      return ubications.length;
    }
  };
})();