一個簡單的JavaScript小部件設計問題。 最近我已經開始使用JavaScript了。作爲我工作的一部分,我打算創建大量可重用的代碼;所以對我來說,JavaScript小部件似乎是最好的方式去。 但是我面臨着設計困境,我無法找到正確的答案。OOPs概念轉換成Javascript部件
我有一個簡單的JavaScript小部件,它改變了html組件中的字符串。所以我的小部件是有點像這樣:
(function() {
var convertString = function() {
$(".classForHtmlComponentsIWantToHandle").each(function(index, element) {
//js_fu stuff done with string fetched from "element"
});
};
var _somePrivateHelperMethod() {
//some work that would have been impossible without this helper method
};
GloballyDefinedNamespace.StringUtils = {convert : convertString};
}());
這讓我上面打過去了
GloballyDefinedNamespace.StringUtils.convert();
現在,如果你會在我的窗口小部件上下的功能注意到,我提取所有的HTML組件從DOM ,我想改變字符串。有趣的是,HTML將具有相同css類的span和div以及具有css類的文本框組件。
兩者都有不同的方式提取它們的值並設置新值。 根據我的經驗,如果這是一個改變字符串的小部件,那麼它應該關心的是傳入對象,它以統一的方式「持有」字符串,然後基於對象期望,我的小部件應該能夠盲目操作。
「如果它聽起來像一隻鴨子,像鴨子一樣走路,那麼它就是一隻鴨子」。之類的事情。
如此有效,我希望能夠不用擔心在我的小部件中區分作爲文本框或跨度的「元素」對象。而是將其包裝成通用包裝。
然而,人們告訴我,在JavaScript小部件中,通常的約定是照顧小部件內的特定組件。我不相信,因爲我堅信編程接口而不是細節。所以我處於衝突中。
在我上面的例子中,我不認爲突出的困境對這個問題是公平的,但是從更大的範圍來看,這經常會成爲我的問題。
我想聽聽大家的意見,關於如何在我的小部件中爲HTML DOM創建組件獨立性?是一個解決方案創建具有相同接口的JavaScript包裝對象,然後單獨選擇它們,然後進行方法調用如下?
(function() {
var locateAllComponents = function() {
$(".generic-class").each(function(index, element) {
//wrap element into suitable wrapper that has common interface for getter
//setter.
GloballyDefinedNamespace.StringUtils.convert(wrappedElement);
});
};
}())
任何見解和答案將不勝感激。