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");
})
})
})
})()
上边的例子也简单的说明了下,希望对大家有帮助,有什么问题及时交流。
javascript学习(10)——[知识储备]链式调用的更多相关文章
- swift学习笔记之-可选链式调用
//可选链式调用 import UIKit /*可选链式调用(Optional Chaining) 1.在可选值上请求和调用该可选值的属性.方法及下标的方法,如果可选值有值,那么调用就会成功,返回可选 ...
- JavaScript实现链式调用
学习Jquery的时候,我们通常会看到链式调用的写法 $(window).addEvent('load', function(){ $('test').show().setStyle('color', ...
- JavaScript中的链式调用
链模式 链模式是一种链式调用的方式,准确来说不属于通常定义的设计模式范畴,但链式调用是一种非常有用的代码构建技巧. 描述 链式调用在JavaScript语言中很常见,如jQuery.Promise等, ...
- 关于JavaScript中的setTimeout()链式调用和setInterval()探索
http://www.cnblogs.com/Wenwang/archive/2012/01/06/2314283.html http://www.cnblogs.com/yangjunhua/arc ...
- JavaScript链式调用
1.什么是链式调用? 这个很容易理解,例如 $('text').setStyle('color', 'red').show(); 一般的函数调用和链式调用的区别:链式调用完方法后,return thi ...
- JavaScript设计模式-8.链式调用
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 《javascript设计模式》笔记之第六章:方法的链式调用
这一章要实现的就是jQuery的那种链式调用,例子: $(this).setStyle('color', 'green').show(); 一:调用链的结构: 首先我们来看一下最简单的$()函数的实现 ...
- JavaScript设计模式——方法的链式调用
方法的链式调用: (function() { //私有类 function _$ (els) { this.elements = []; for(var i = 0, len = els.length ...
- swift 学习- 19 -- 可选链式调用
// 可选链式调用 是一种在当前值可能为 nil 的可选值上请求 和 调用属性, 方法以及下标, 如果 可选值有值, 那么调用就会成功, 如果可选值是 nil, 那么就会将返回 nil , // 多个 ...
随机推荐
- 简单的mvvm light 应用
public class MainStudentModel:ViewModelBase { //实体 private StudentModel stu = new Stude ...
- 12-C语言字符串
目录: 一.字符串 二.字符串输入输出函数 三.指针数组(字符串数组) 回到顶部 一.字符串 1 一组字符数组,以数组的首地址开始,以ASC码的'\0'结束. 2 字符串与普通数组的区别:普通数组没有 ...
- 整理网站优化(SEO)的方案
首先,我们来确定一下seo方案的定义是什么,所谓seo方案是指针对于某个网站,在完成了解熟悉的情况下,结合自身的一套seo优化方法来制定完成符合这个网站seo推广思路和策略.接下来就了解一下新手seo ...
- 批量 GBK 转 UTF8 java
package encoding; import java.io.File; import java.io.IOException; import java.util.Collection; impo ...
- 转: css3: display:box详解
示例见: css3: flexbox (BTW: blog不能包含iframe script真不方便啊~~) display:box;box-flex是css3新添加的盒子模型属性,它的出现可以解决 ...
- Spring RESTful服务接收和返回JSON最佳实践
http://blog.csdn.net/prince_hua/article/details/12103501
- C++标准程序库的输入输出流(I/O Stream)复制文件(4种方法)
使用C++标准程序库的输入输出流(I/O Stream)复制文件,存在许多的方法, 方法一:逐个字符复制#include < fstream > std::ifstream ...
- Json.Net系列教程 2.Net类型与JSON的映射关系
原文 Json.Net系列教程 2.Net类型与JSON的映射关系 首先谢谢大家的支持和关注.本章主要介绍.Net类型与JSON是如何映射的.我们知道JSON中类型基本上有三种:值类型,数组和对象.而 ...
- C#共享内存实例 附源码
原文 C#共享内存实例 附源码 网上有C#共享内存类,不过功能太简单了,并且写内存每次都从开头写.故对此进行了改进,并做了个小例子,供需要的人参考. 主要改进点: 通过利用共享内存的一部分空间(以下称 ...
- HDOJ 1427(dfs) 速算24点
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1427 思路分析: 题目要求判断是否存在一种运算组合使得4个数的计算结果为24,因为搜索的层次为3层,不 ...