JavaScript中的工厂模式

Nav*_*eet 5 javascript factory-pattern

我想将JavaScript对象的创建与使用它的代码分离,以便我可以灵活地将一个对象实现替换为具有相同签名的其他对象实现,而不会触及大部分代码.为了实现这一点,我想出了Repository和Factory Method的概念来创建对象.这是实施:

//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");
Run Code Online (Sandbox Code Playgroud)

这个模式对我有用,但在我继续在我的项目中实现这个代码之前,我想知道是否存在任何陷阱(模式创建对象失败,性能瓶颈 - 如果我将创建5到10个200到1000的对象使用这种方法的代码行.我在使用服务器端代码很长一段时间后回到JavaScript,所以我对我的解决方案不是很有信心.另外,我本可以使用ES5 Object.create,但客户现在仍然使用IE8和FF3.6浏览器.

谢谢

Ale*_*yne 3

Object.create()只需与 ES5 shim 一起使用,如下所示:https: //github.com/kriskowal/es5-shim/blob/master/es5-shim.js

它可以完成您想要的大部分工作,并且当 ES5 真正成为标准时,它会以 ES5 的方式完成工作。考虑到使用一个对象作为另一个对象的原型的常见情况,它在所有浏览器中都可以正常工作。