gpt4 book ai didi

javascript - JavaScript 中的工厂模式

转载 作者:搜寻专家 更新时间:2023-11-01 04:27:32 25 4
gpt4 key购买 nike

我想将 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 浏览器。

谢谢

最佳答案

只需使用 Object.create() 和像这样的 ES5 垫片:https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js

它可以做你想做的大部分事情,并在 ES5 真正成为标准时以 ES5 的方式做事。考虑到使用一个对象作为另一个对象原型(prototype)的常见情况,它在所有浏览器中都能正常工作。

关于javascript - JavaScript 中的工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5860443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com