面向对象的Javascript与纯jQuery和.data存储

时间:2010-10-22 02:49:20

标签: javascript jquery oop prototype

我目前的编程风格是使用John Resig的Class.extend函数的OO javascript:http://ejohn.org/blog/simple-javascript-inheritance/

这很好但我发现自己编写了许多只能在init上使用的setter和getter。此外,当将这些对象的实例存储在数组中供以后使用时,它似乎会导致IE中的内存泄漏。

我开始倾向于使用更小,更清晰,更易读的代码而不是看似过度的OO方法。我的想法是现在使用jquery并使用.data方法存储数据属性,将所有内容都放在dom之外。例如,您只需使用类推文向dom添加div,而不是创建新的Tweet对象的实例,只需在.data缓存中添加诸如author,timestamp,reply to,sent from等属性。那个dom元素。

在创建诸如twitter之类的项目中的项目实例时,您如何看待这种结构较少的方法? OO和原型继承是最好的方法还是更严格的dom操作?

2 个答案:

答案 0 :(得分:1)

我的大脑告诉我,非结构化的Javascript不依赖于DOM操作,并且使用jQuery调用和调出它是理想的。

但是,我刚刚编写了一个HTML5 Web应用程序,它使用内置的SQLlite脱机运行,并使用主要的.data并在div中存储信息并将它们从那里取出来。它简单,干净,容易,但由于某种原因感觉不对。

但它运作良好。

答案 1 :(得分:1)

我正在做类似的事情。我采用了OO javascript方法。但我没有使用数组,而是使用键值对象。 是唯一的dom元素id,是对象本身。它看起来像这样。

例如:

var collection = {};
var $domEl = jQuery;              // jquery dom element
var myClass= new MyClass($domEl); // class instance

// add to collection
collection[$domEl.attr('id')] = myClass;

// remove
delete collection[$domEl.attr('id')];

确实取决于对象的复杂程度。严格的.data方法需要依赖所有相关方法的插件,然后将数据存储在元素数据中。我有许多方法与严格的元素交互无关,所以我将方法和数据保存在类中。