gpt4 book ai didi

Javascript 插件模式 : extendable or closures?

转载 作者:行者123 更新时间:2023-11-30 05:38:49 24 4
gpt4 key购买 nike

注意:我不确定这属于这里还是 Programmers ,但我有点担心他们会因为 JavaScript 而将其移至 StackOverflow。

我正在弄清楚要为我正在编写的插件使用什么模式。当我查看其他插件时,排名靠前的插件相当受欢迎(我在本例中使用 Underscore.js 的 _.extend 方法)。我不喜欢它的是,我需要在任何地方使用 this,我认为这可能会影响缩小并使我的代码更难阅读。另一方面,它真的很容易扩展。

var App = function(options) {
this.initialize(options);
};

_.extend(App.prototype, {
initialize: function(options) {
this.options = options || {};
this.doStuff();
},
doStuff: function() {
if (this.options.talk) {
return "Doing stuff.";
}
}
});

var myApp = new App();
myApp.hasOptions = function() { return !!this.options; }; // will return false

另一种方法是使用闭包。最大的好处是代码易于阅读,而且没有任何内容是公开的(方法或多或少是私有(private)的)。但问题是它不可扩展。

var App = function(options) {
options = options || {};

function initialize() {
doStuff();
};

function doStuff() {
if (options.talk) {
return "Doing stuff.";
}
};

initialize();
};

var myApp = new App();
myApp.hasOptions = function() { return !!options; }; // will throw a ReferenceError

我认为我的插件不需要可扩展性;这是一个文本输入/html 输出插件。我可以添加对几个事件回调的支持,以帮助其他开发人员将其与他们的应用程序结合起来。

我是不是忽略了什么?无论如何,我是否应该使用可扩展代码,使用闭包会遇到麻烦吗?

最佳答案

缺少 private 确实是一种语言问题,我不会让它支配您的设计。

这可以缩小到 a = this; a.foo();

争夺 gzip 真正好的字节是不值得的。大部分开销用于建立 TCP 连接;额外的数据包并不那么引人注目。闭包也有很多开销,你最终会得到代表相同功能的不同对象。如果您只创建一个实例,这不是问题,但它可能会开始累加。

关于Javascript 插件模式 : extendable or closures?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21994837/

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