• 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事件监听器,其作用是在他们被点击时将文字设置为绿色。

  • 相关阅读:
    参数传递二维数组 .
    类的static成员变量和成员函数能被继承吗
    Oracle面试题(基础篇)
    Visual C++ 8.0对象布局
    C++对象模型 多重继承与虚函数表
    浅析GCC下C++多重继承 & 虚拟继承的对象内存布局
    C++对象内存布局测试总结
    查找
    反转链表
    排序
  • 原文地址:https://www.cnblogs.com/xinxingyu/p/4806727.html
Copyright © 2020-2023  润新知