2011-05-19 61 views
0

我不知道我是否正確地描述這個,但我試圖使用靜態成員來處理存儲和提取對象實例,但它是不工作,並且不會在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() { 

    }, 
} 
+0

對於JS的工廠模式的啓動認爲這會發生什麼:http://2007-2010.lovemikeg.com/2009/06/26/the-工廠模式在JavaScript/ – Drew 2011-05-20 03:47:06

回答

0

MyClass.prototype.init未在您的代碼中定義。這意味着當您創建new MyClass時,this.init未定義。不過,我不知道爲什麼這樣的錯誤不會出現在Firebug中。

+0

對不起,我離開了它。它在那裏,我只是沒有包括所有的方法爲了簡潔起見 – Banditvibe 2011-05-20 01:12:41

+0

好吧,編輯我的示例代碼 – Banditvibe 2011-05-20 01:15:09

+0

Doah!這是一個錯字。我在那裏有美元符號:$ cfg。當你從js到php時,會發生這種情況 – Banditvibe 2011-05-20 03:01:23

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 
+0

它與頁面上有多個對象實例有關,但只有一個全局變量。它的工作原理,我只是有一個錯字。 – Banditvibe 2011-05-21 04:26:33

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);