注意:我不確定這是屬於這裏還是Programmers,但我有點害怕他們會將它移到StackOverflow,因爲JavaScript。Javascript插件模式:可擴展還是關閉?
我搞清楚了我正在寫的插件使用什麼模式。當我在查看其他插件時,最常見的插件是相當流行的(我在本例中使用了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
另一種方法是使用閉包。最大的好處是代碼很容易閱讀,而且沒有一個是暴露的(方法或多或少是私有的)。這個問題雖然是不可擴展的。
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輸出插件中的文本。我可以添加對一些事件回調的支持,以幫助其他開發人員將其與應用程序綁定。
我可以俯視嗎?無論如何,我是否應該繼續使用可擴展代碼,是否會因使用閉包而陷入困境?
@DavidEhrmann謝謝,你爲什麼不改變你的評論到一個答案? – Phortuin
「插件」是什麼意思?它應該插在哪裏?它應該如何使用? – Bergi
@Bergi它將用於基於Web的內容管理系統,以幫助編寫更多可讀文本。最小的實現類似於聲明'var betterText = new BetterText({...});'選項哈希包含一對HTML元素選擇器(textarea用於輸入,div用於輸出)以及可選的markdown支持。 – Phortuin