尝试使用静态方法和静态哈希对象注册多个对象实例

时间:2011-05-19 23:50:02

标签: javascript factory-pattern

我不知道我是否正确地描述了这个,但是我正在尝试使用静态成员来处理存储和获取对象实例,但它不起作用并且不会在FireBug中引发错误。当它到达MyClass.instances [id] = new MyClass(cfg);执行就此停止。

/*
I want to be  able to call like so:

MyClass.register('34', cfg);

and then use like...

MyClass.get('34').someMeth();

*/


/*  MyClass  */
var MyClass = function(config){
    this.init (config);
};

/* static var to hold instances    */
MyClass.instances = {};

/* static method to register an instance   */
MyClass.register = function (id, $cfg) {

    //this is where it goes poof.... no error just stops
    MyClass.instances[id] = new MyClass(cfg);
    return;
}

/* static method to get an instance   */
MyClass.get = function (id) {
    return MyClass.instances[id];
}



/* object instance methods here  */
MyClass.prototype = {

    init: function () {

    },

    someMeth: function () {

    },
}

3 个答案:

答案 0 :(得分:0)

您的代码中未定义

MyClass.prototype.init。这意味着在您创建this.init时未定义new MyClass。我不知道为什么这样的错误不会出现在Firebug中。

答案 1 :(得分:0)

不确定为什么要创建对象只是为了用任意键注册某个地方。也许这会给你你想要的东西

var register = [];

var obj = {
  i: 'gots',
  mad: 'properties'
};

var newObject = Object.create( obj );
newObject.i = 'don't gots';

register.push( newObject );

var anotherObject = Object.create( obj );
anotherObject.i = 'got mad';

register.push( anotherObject );

var whatObject = register[0];

console.log( whatObject.i ); //don't gots
console.log( register[1].i ); //gots mad

答案 2 :(得分:0)

对不起,这是一个错字。我在那里有美元符号:$ cfg。这就是你从js到php来回发生的事情

MyClass.register = function (id, $cfg) {

//this is where it goes poof.... no error just stops
MyClass.instances[id] = new MyClass(cfg);