zoukankan      html  css  js  c++  java
  • javascript学习(10)——[知识储备]链式调用

    上次我们简单的说了下单例的用法,这个也是在我们java中比较常见的设计模式。

    今天简单说下链式调用,可能有很多人并没有听过链式调用,但是其实只要我简单的说下的话,你肯定基本上都在用,大家熟知的jQuery中我们通常都是调用完一个函数后,我们直接就继续调用其他函数,而不需要再去new一个新的对象。这就是典型的链式调用。

    首先我们列举个例子,说明下并非链式调用,给我们带来的不方便的地方:

    /**
     * 从一个实例引出立案时调用的需求
     */
    (function(){
    	//创建一个cat
    	function Cat(name){
    		this.name = name;
    		this.run = function(){
    			document.write(name+ " start run");
    		}
    		this.stopRun = function(){
    			document.write(name+ " stop run");
    		}
    		this.sing = function(){
    			document.write(name+ " start sing");
    		}
    		this.StopSing = function(){
    			document.write(name+ " stop sing");
    		}		
    	}
    	//测试
    	var c = new Cat("abc");
    	c.run();
    	c.sing();
    	c.StopSing();
    	c.stopRun();
    })()


    下面我们举个例子说明下链式调用的好处,从而和上边非链式调用做比较:

    /**
     * 从一个实例引出立案时调用的需求
     */
    (function(){
    	//创建一个cat
    	function Cat(name){
    		this.name = name;
    		this.run = function(){
    			document.write(name+ " start run");
    			return this;
    		}
    		this.stopRun = function(){
    			document.write(name+ " stop run");
    			return this;
    		}
    		this.sing = function(){
    			document.write(name+ " start sing");
    			return this;
    		}
    		this.StopSing = function(){
    			document.write(name+ " stop sing");
    			return this;
    		}		
    	}
    	//测试
    	var c = new Cat("abc");
    	c.run().stopRun().sing().StopSing();
    })()


    以上两个例子也比较简单的说明了链式调用和非链式调用的区别。


    那么下面我们模仿jquery做一个链式调用的例子:

    /**
     * 模仿jquery的链式调用
     */
    //为了类(Function)扩展函数,我们定义一个他的静态函数
    Function.prototype.method = function(name,fn){
    	this.prototype[name] = fn;
    	return this;
    };
    (function(){
    	//还记得吗他是私有变量的写法
    	function _$(els){};	
    	//准备方法
    	_$.onready = function(obj,fn){
    		if(obj){
    			//按需求吧对象(_$)注册到window上
    			obj.$ = function(){
    				return new _$(arguments);
    			}			
    		}else{
    			//按需求吧对象(_$)注册到window上
    			window.$ = function(){
    				return new _$(arguments);
    			}
    		}
    		fn();
    	}
    	//链式的对象增加jquery库提供的操作函数
    	_$.method("addEvent",function(type,fn){
    		fn();
    	}).method("getEvent",function(fn,e){
    		fn();
    	}).method("addClass",function(className){
    		fn();
    	}).method("removeClass",function(className){
    		fn();
    	}).method("replaceClass",function(oldClass,newClass){
    		fn();
    	}).method("getStyle",function(el,fn){
    		fn();
    	}).method("setStyle",function(el,fn){
    		fn();
    	}).method("load",function(url,fn){
    		fn();
    	});
    	//开始使用
    	var com = {};
    	_$.onready(com,function(){
    //		$("div01").addEvent("click",function(){
    //			alert("click Event");
    //		})
    		com.$("div01").addEvent("click",function(){
    			alert("click Event");
    			com.$(this).getEvent(function(){
    				alert("click getEvent");
    			})
    		})		
    	})
    })()
    

    上边的例子也简单的说明了下,希望对大家有帮助,有什么问题及时交流。

  • 相关阅读:
    java.lang.NoClassDefFoundError: org/hibernate/service/ServiceRegistry] 类似问题
    哪些window你不知道的却实用的小技巧----window小技巧
    windows命令快捷启动应用-----window小技巧
    cmd窗口关闭 -----window小技巧!
    Eclipse错误笔记!
    如何在WIndows电脑上安装 SVN Server 实现代码版本控制
    linux之应用开发杂记(一)
    面试知识点汇总
    Android技术面试整理
    MYSQL常用操作语句
  • 原文地址:https://www.cnblogs.com/riasky/p/3430692.html
Copyright © 2011-2022 走看看