Javascript 面向对象好,如何实现简单jQuery
这篇文章和jQuery其实是完全没有关系的,只是我始终无法理解,直接实现DOM不就好了,OOP有什么实践价值么?
于是师匠通过一例,似乎让我有点收获嘛~至少感觉这样写,比我过去写的function都优雅不少。
1var DOM = {};
2
3function ElementCollection(elements) {
4 this._elements = elements || [];
5}
6
7function Element(element) {
8 this.element = element || document.documentElement;
9}
10
11Element.prototype.select = function(selector) {
12 return new ElementCollection(this._element.querySelectorAll(selector));
13}
14
15ElementCollection.prototype.forEach = function(cb) {
16 return Array.prototype.forEach.call(this._elements, cb);
17}
18
19DOM.select = function(selector) {
20 var el = DOM.from();
21 return el.select.apply(el, arguments);
22}
23
24DOM.from = function(element) {
25 return new Element(element);
26};
27
28ElementCollection.prototype.style = function(name, value) {
29 this.forEach(function(el, index) {
30 el.style[name] = value;
31 });
32};
33
然后我们可以像jQuery那样愉快的玩耍啦。并且这一例中用的call和apply感觉也很灵活呀,就像我以前看到的那样,call多用于参数确定个数的情况,而apply用户参数可能变化的情况(或者说未来我改动这个函数怎么办的情况)
评论 (0)