2011-05-02 54 views
5

我想將JavaScript對象的創建與正在使用它的代碼分離開來,以便我可以靈活地將具有相同簽名的其他對象實現替換爲一個對象實現,而無需觸及大部分代碼。爲了實現這個,我想出了Repository和Factory Method創建對象的概念。下面是執行:JavaScript中的工廠模式

//The Factory Method 
function ObjectFactory() {} 
ObjectFactory.create = function (o) { 
    var args = [].slice.call(arguments, 1); 

    function F() {} 
    F.prototype = o.prototype; 
    var instance = new F(); 
    o.apply(instance, args); 
    return instance; 
}; 

//The Repository 
var Repository = { 
    'invitation': Invitation, 
    'message': Message 
}; 

//Usage 
var inv = ObjectFactory.create(Repository["invitation"], "invitation", "invitation body", "Sender"); 
var msg = ObjectFactory.create(Repository["message"], "message", "message body"); 
var inv2 = ObjectFactory.create(Repository["invitation"], "invitation2", "invitation body2", "Sender"); 

這種模式爲我工作,但我繼續前進,實現這個代碼在我的項目,我想知道以前是否有任何缺陷(模式的失敗來創建對象,性能瓶頸 - 如果我將使用這種方法創建5-10到200行到1000行代碼的對象)。我在長時間處理服務器端代碼後返回JavaScript,因此我對自己的解決方案並不十分自信。另外,我可以使用ES5 Object.create,但客戶現在只能使用IE8和FF3.6瀏覽器。

感謝

回答

2

只需使用Object.create()與ES5墊片像這樣一起:https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js

它做你最想要什麼,以及做事情的時候,實際上成爲標準的ES5方式。考慮到使用一個對象作爲另一個對象的原型的常見情況,它在所有瀏覽器中都能正常工作。

+0

我不知道這個圖書館。感謝您指出。 – Navneet 2011-05-03 01:09:00