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

链式调用是一种语法招数。
作用:能让你通过重用一个初始化操作来达到用少量代码表达复杂操作的目的、。

这种技术包含两个部分:
 1.一个创建代表html元素的对象的工厂。以及一批对这个html元素执行某些操作的方法。
 通过例子对比:之前和之后的代码,对链式调用的概念的初步认识。
  之前:

  addevent($(‘example‘),"click",function(){

   setstyle(this,"color",‘green‘);

   show(this);

  })

执行链式调用:

   $(".example").addevent("click",function(){
    $(this).setstyle(‘color‘,‘green‘).show();
   })

6.1调用链的结构

  function $(){

   var elements = [];

   for(var i=0;len = arguments.length,i<lengt;++i){

    var element = arguments[i];

    if(typeof element ==="string"){

     element = document.getElementById(element);

    }

    if(arguments,length===1){

     return element;

    }

    element.push(element);

   }

    return elements;

  }

---------改造--------------------
  步骤:
   1.把这个函数改造为一个构造器,把那些元素作为数组保存在一个实例属性中。
   2.让所有定义在构造器函数的prototype属性所指对象中的方法都返回用以调用方法的那个实例的引用,那么他就具有了链式调用的能力。
   3. 首页需要把$函数改为一个工厂方法。他负责创建支持链式调用的对象。
   4.这个函数应该能接受元素数组形式的参数,以便我们能够使用与原来一样的公有接口

   (function(){

    function _$(els){

     this.elements =[];

     for(var i=0,len  = els.length;i<len;++i){

      var element = els[i];

      if(typeof element === "string"){

       element = document.getElementById(element);

      }

      this.elements.push(element);

     }

    }

    window.$ = function(){

     return new _$(arguments);

    }

   })()

---------------深入改造- 摩擦摩擦 似魔鬼步伐,一步、两步------------------
 
 所有对象都会继承其原型对象的属性的方法。我们可以让定义在原型对象中那几个方法都返回用以调用方法的实例对象的引用。这些就可以对那些方法进行链式调用了。
 实例:把_$这个私有构造函数的prototype对象中添加方法。以便实现链式调用:

  (function(){
   function _$(els){
   }
   _$.prototype = {
    each:function(fn){
     for(var i=0,length = this.elements.length;i<len;++i){
      fn.call(this,this.elements[i]);
     }
     return this;
    },
    setstyle:function(prop,val){
     this.each(function(el){
      el.style[prop] = val;
     });
     return this;
    },
    show:function(){
     var that = this;
     this.each(function(el){
      that.setstyle("display","block");
     })
     return this;
    },
    addEvent:function(type,fn){
     var add = function(el){
      if(window.addeventlistener){
       el.addeventlistener(type,fn,false);
      }else if(window.attachEvent){
       el.attachEvent("on"+type,fn);
      };
      this.each(function(el){
       add(el);
      });
      return this;
     }
    };
    window.$ = function(){
     return new _$(argments);
    }
   }
  })()

-------------------类分析----------在这光滑地上摩擦----------
  1.该类的每一个方法的最后一行都是以return this 结束
  2.这将会用以调用方法的对象传给调用连上的下一个方法。

---------测试用例------------------妈的等了好久,虽然还有好多我不懂的,但是还是想试试,内心默默的激动-------

 $(window).addEvent(‘load‘,function(){

  $("test-1","test-2").show().setstyle(‘color‘,‘red‘).addevent("click",function(e){

   $(this).setstyle(‘color‘,‘green‘);

  })

 })

-----------fuck ~O^O~  这种方式确实在使用jquery的时候用到--------淡淡的忧伤--,好好学习啊~o~

--------------------------------新章节继续,雅蠛蝶(6.2 设计一个支持方法调用的javascript库)-------------------------------------------------------------有木有吓尿了感觉,紧张-----------------------
 常见的大多数javascript库的特性
  1.事件,添加和删除事件监听器,对事件对象进行规范化出
  2.dom:类名管理;样式管理
  3.ajax:对xmlhttprequest进行规范发处理

6.3 使用回调从支持链式调用的方法获取数据 -------------》(说实在的感觉很实用)
  一个章节总是需要描述的用法和使用场景:
   下面见:zzzZZZ
    1。链式调用很适合赋值器方法,但是对于取值方法,我们希望返回的是数据不是this.
    2.所有需要变通的犯法:使用回调技术来返回所要的数据。(fuck,确实牛逼啊,森森的佩服啊, *@_@*
    3.通过例子掩饰总方法
     api1类使用普通的取值器(中断了调用链),

     window.api = window.api || function(){
      var name ="hello word";
      this.setname = function(newname){
       name = newname;
       return this;
      }
      this.getname = function (){
       return name;
      }
     }
     var o = new api;
     console.log(o.getname()); 
     console.log(o.setname("meow").getname());

高级模式------>回调方式

window.api1= window.api2 || function(){

      var name = "hello word"

      this.setname  =  function(newname){

       name = newname;

       retrun this;

      }

      //重要的步骤

      this.getname = function(callback){

       callback.call(this,name);

       return this;

      }

     }

-------------------------------end 23:40--- 有点疲惫----- (-_-)ZZZ 睡著了啦~~ -------------------------

时间: 2024-10-04 14:58:37

javascript设计模式 第6章 链式调用的相关文章

如何写 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设计模式-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

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.elemen

方法的链式调用【参考javascript设计模式第6章】

对应经常使用jquery的朋友,方法的链式调用应该是已经很属性了,书上有模拟出一个很简单的类库代码, 见代码如下: Function.prototype.method = function(name,fn){ this.prototype[name] = fn; return this; }; (function(){ function _$(els){ ........ } /*Events  addEvent getEvent*/ _$.method("addEvent",func

关于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

JavaScript 链式调用

我们使用jquery的时候,jquery的简单的语法及可实现链式调用方法,现在我们自己也封装一个链式调用的方法,来理解下 jquery中如何封装链式调用 无非就是每次调用一个方法的时候 给这个方法返回this即可,this指向该对象自身,我们看看代码: 1 // 定义一个简单的对象,每次调用对象的方法的时候,该方法都返回该对象自身 2 var obj = { 3 a: function(){ 4 console.log("输出a"); 5 return this; 6 }, 7 b:f

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

javascript设计模式实践之职责链--具有百叶窗切换图片效果的JQuery插件(三)

在上一篇<javascript设计模式实践之模板方法--具有百叶窗切换图片效果的JQuery插件(二)>里,通过采用模板方法模式完成了切换效果对象的构建编写. 接下来就是完成各效果对象的调用和联动. 切换要求:当前图片显示指定时间后执行切换效果并切换下一张图片,最后一个切换后从头开始. 按照要求一个效果对象完成后要执行下一个,最后一个完成后要从头开始, 看上去就是一个带状态通知的环形列表,类似于这样的特征,可以采用职责链模式来构建. 职责链就是由不同的功能处理构成的链表,每一个功能处理作为一个

链式调用

链式调用 不论是JavaScript还是C#程序,我们已经习惯了采用如下所示的"链式调用"的方式进行编程,这样确实会使我们的程序变得很精练. 1: new Foo() 2: .UseXxx() 3: .UseZzz() 4: .UseZzz() 5: .Invoke(); 采用这种链式调用方式的很多方法都是扩展方法,比如上面所示的UseXxx.UseYyy和UseXxx方法就是采用如下形式定义的扩展方法. 1: public interface IFoo 2: { 3: void In