JavaScript设计模式——方法的链式调用

方法的链式调用:

 1         (function() {
 2             //私有类
 3             function _$ (els) {
 4                 this.elements = [];
 5                 for(var i = 0, len = els.length; i < len; ++i){
 6                     var element = els[i];
 7                     if(typeof element === ‘string‘){
 8                         element = document.getElementById(element);
 9                     }
10                     this.elements.push(element);
11                 }
12             }
13             _$.prototype = {
14                 each: function(fn) {
15                     for (var i=0, len=this.elements.length; i<len.length; ++i) {
16                         fn.call(this, this.elements[i]);
17                     };
18                     return this;
19                 },
20                 setStyle: function(prop, val) {
21                     this.each(function(el){
22                         el.style[prop] = val;//el即dom元素,给每个元素设置样式
23                     });
24                     return this;
25                 },
26                 show: function() {
27                     var that = this;
28                     this.each(function() {
29                         that.setStyle(‘display‘, ‘block‘);
30                     });
31                     return this;
32                 },
33                 addEvent: function(type, fn) {
34                     var add = function(el) {
35                         if(widow.addEventListener){
36                             el.addEventListener(type, fn, false)
37                         }
38                         else if(widow.attachEvent){
39                             el.attachEvent(‘on‘+type, fn);
40                         }
41                     };
42
43                     this.each(function(el) {
44                         add(el);
45                     });
46                     return this;
47                 }
48             }
49             window.$ = function() {
50                 return new _$(arguments);
51             };
52         })();

看看该类的每一个方法的最后一行,你会发现他们都以“returen this”结束。这将会用以调用方法的对象传个调用链上的下一个方法。支持链式调用的接口带来的可能性是无穷的。现在你可以这样编写代码:

1         $(widow).addEvent(‘load‘, function() {
2             $(‘test-1‘,‘test-2‘).show().
3             setStyle(‘color‘, ‘red‘).
4             addEvent(‘click‘, function() {
5                 $(this).setStyle(‘color‘, ‘green‘);
6             });
7         }

这会把一个时事件监听器关联到window对象的load事件。它执行的时候回立即显示ID值为test-1和test-2的两个元素并将其中的文字设置为红色,随后,它会为这两个元素添加click事件监听器,其作用是在他们被点击时将文字设置为绿色。

时间: 2024-10-12 18:45:07

JavaScript设计模式——方法的链式调用的相关文章

JavaScript设计模式 Item 5 --链式调用

1.什么是链式调用 这个很容易理解,例如: $(this).setStyle('color', 'red').show(); 一般的函数调用和链式调用的区别:调用完方法后,return this返回当前调用方法的对象. function Dog(){ this.run= function(){ alert("The dog is running...."); return this;//返回当前对象 Dog }; this.eat= function(){ alert("Af

如何写 JS 的链式调用 ---》JS 设计模式《----方法的链式调用

1.以$ 函数为例.通常返回一个HTML元素或一个元素集合. 代码如下: function $(){ var elements = []; for(var i=0;i<arguments.length;i++){ var element = argument[i]; if(typeOf element == "String") { element = document.getElementById(element); } if ( arguments.length === 1)

关于JavaScript中的setTimeout()链式调用和setInterval()探索

http://www.cnblogs.com/Wenwang/archive/2012/01/06/2314283.html http://www.cnblogs.com/yangjunhua/archive/2012/04/12/2444106.html 下面的参考:http://evantre.iteye.com/blog/1718777 1.选题缘起 在知乎上瞎逛的时候看到一个自问自答的问题: 知乎上,前端开发领域有哪些值得推荐的问答?,然后在有哪些经典的 Web 前端或者 JavaScr

js实现方法的链式调用

假如这里有三个方法:person.unmerried();person.process();person.married();在jQuery中通常的写法是:person.unmerried().process().married();而在js中要实现链式调用,只需在类中的每个方法中通过this关键字返回对象实例的引用. function Person(){}; Person.prototype.status =false; Person.prototype.married =function()

javascript设计模式 第6章 链式调用

链式调用是一种语法招数.作用:能让你通过重用一个初始化操作来达到用少量代码表达复杂操作的目的.. 这种技术包含两个部分: 1.一个创建代表html元素的对象的工厂.以及一批对这个html元素执行某些操作的方法. 通过例子对比:之前和之后的代码,对链式调用的概念的初步认识.  之前:   addevent($('example'),"click",function(){    setstyle(this,"color",'green');    show(this);

JavaScript链式调用

方法的链式调用 调用链的结构 对$函数你已经很熟悉了.它通常返回一个html元素或一个html元素的集合,如下: function$(){ var elements = []; for(vari=0,len=arguments.length;i<len;++i){ var element = arguments[i]; if(typeof element ===”string”){ element = document.getElementById(element); } if(argument

如何搭建一个可以链式调用,批量操作的前端框架

用jquery写代码的时候总是很方便,少写很多代码.那么为什么会这样呢?我觉得主要有三个原因: ① jquery封装了获取dom的方法,只需要一个$就可以方便地获取你想要得dmo节点 ② 链式调用,比如你可以这样写代码: $("#a").show().height(20); 而不需要这样写 $("#a").show(); $("#a").height(20); ③ 对象的批量操作.假如你需要对下面的列表进行同样的操作 <li class=&

简谈 JavaScript、Java 中链式方法调用大致实现原理

相信,在 JavaScript .C# 中都见过不少链式方法调用,那么,其中实现该类链式调用原理,大家有没有仔细思考过?其中 JavaScript 类库:jQuery 中就存在大量例子,而在 C# 中,其中 lambda 表达式的大量使用以及扩展方法的新增,使链式调用也见的不少. 首先,就谈谈 JavaScript 中链式调用,其实,也是就是运用之前提及的 this . var Person=function(name,age){ this.Name=name; this.Age=age; };

JavaScript设计模式-8.链式调用

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript高级语法8-链式调用</title> 6 </head> 7 <body> 8 <div id="box"></div> 9 <script type="text/javas