`
husttianwang
  • 浏览: 6317 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

如何设计一个支持方法链式调用的JavaScript库

阅读更多

废话不多说,代码摆出来,注释什么的都很清楚,如果看不很懂,请移步 javascript链式调用

 

//设计一个支持方法链式调用的JavaScript库

/*
	常见于大多数JavaScript库中的特性
	—————————————————————————————————————————————————————————————————————
			特性			|						说明
	————————————————————————————————————————————————————————————————————————————————
			事件			|	添加和删除事件监听器,对时间对象进行规范内化处理
			DOM				|	类名管理,样式管理
			Ajax			|	多XMLHttpRequest进行规范化处理
	————————————————————————————————————————————————————————————————————————————————

	注:可以对私有的_$构造函数进行扩充
*/
Function.prototype.method = function(name, fn){
	this.prototype[name] = fn;
	return this;
};

(function(){

	function _$(els){
		this.element = [];
		for(var i = 0, len = els.length; i < len; i++){
			var element = els[i];
			if(typeof element === 'string'){
				element = document.getElementById(element);
			}
			this.element.push(element);
		}
		return this;
	}

	/*
		Events
			* addEvent
	*/

	_$.method('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);
			});
		}).

	/*
		otherFun
			* each
			* setStyle
			* show
	*/

		method('otherFun', function(fn){
			for(var i = 0, len = this.element.length; i < len; i++){
				fn.call(this, this.element[i]);
			}
			return this;
		}).
		method('setStyle', function(prop, val){
			this.each(function(el){
				el.style[prop] = val;
			});
			return this;
		}).
		method('show', function(){
			var that = this;
			this.each(function(el){
				that.setStyle('display', 'none');
			});
			return this;
		});

	window.installHelper = function(scope, interface){
		scope[interface] = function(){
			return new _$(arguments);
		};
	};
})();

/*
	//处理库中$的冲突问题

	用户可能会这样使用:
	installHelper(window, "$");

	$('example').show();

	也可以将功能添加到实现定义好的命名空间对象中:
	window.com = window.com || {};
	com.example = com.example || {};
	com.example.util = com.example.util || {};

	installHelper(com.example.util, '$');
	(function(){
		var get = com.example.util.get;
		get('example').show();
	})();
*/
1
6
分享到:
评论
1 楼 mfkvfn 2012-09-18  
不就是settter方法最后return this;么?说得那么高深干嘛

相关推荐

    【JavaScript源代码】详解JavaScript中的链式调用.docx

    除了上述链式调用的基本实现,JavaScript的ES2020引入了一个新的特性——**可选链操作符(?.)**。这个运算符允许我们安全地尝试访问链中的深层属性,即使在中间路径可能为`null`或`undefined`的情况下也不会抛出...

    javascript 支持链式调用的异步调用框架Async.Operation.docx

    链式调用是一种常见的设计模式,在许多库和框架中都有应用,尤其是在JavaScript中。链式调用允许开发者通过返回当前对象的方法调用来串联多个方法调用,从而构建简洁且易于阅读的代码。例如: ```javascript ...

    格式化-function与小括号间留空格。链式调用不换行.zip

    在JavaScript中,对象方法的链式调用是一种常见的编程模式,它允许我们在一个对象上连续调用多个方法。例如: ```javascript myObject .method1() .method2() .method3(); ``` 这里,每个方法调用后面都没有...

    学习JavaScript设计模式(链式调用)

    链式调用是JavaScript中一种常见的设计模式,它允许我们在单个表达式中连续调用多个方法。这种模式在很多JavaScript库中被广泛使用,如jQuery、Prototype等。链式调用的核心思想在于方法执行完后返回对象本身,从而...

    详解JavaScript中的链式调用

    链式调用在JavaScript语言中很常见,如jQuery、Promise等,都是使用的链式调用,当我们在调用同一对象多次其属性或方法的时候,我们需要多次书写对象进行.或()操作,链式调用是一种简化此过程的一种编码方式,使代码...

    JavaScript设计模式+JavaScript模式+JavaScript异步编程

    - Promise:解决回调地狱,提供链式调用,但仍有回调陷阱。 - Generator:通过yield关键字实现异步流程控制,配合co库使用。 - async/await:基于Promise,提供同步式的异步编程体验,使得代码更易读和维护。 ...

    javascript简单链式调用案例分析

    链式调用是JavaScript中一种常用的编程模式,它允许我们连续调用同一个对象的多个方法,而无需重复引用该对象。这种模式特别适用于库和框架的设计,例如著名的jQuery库就广泛使用了链式调用。在JavaScript中实现链式...

    Javascript 链式调用实现代码(参考jquery)

    链式调用允许我们连续地调用同一个对象上的方法,而不需要重复引用该对象本身。这种模式在减少代码冗余和提高可读性方面非常有效。 要实现链式调用,一个对象的方法必须返回对象自身(即返回this关键字或返回对象...

    详解ES6 Promise对象then方法链式调用

    ES6的Promise对象有一个非常重要的方法:then(),这个方法是Promise对象处理异步操作的基础,并且支持链式调用。 Promise对象的then方法可以接收两个参数,这两个参数分别对应于Promise状态的解决(fulfillment)和...

    javascript 支持链式调用的异步调用框架Async.Operation

    链式调用是指在一个对象方法执行完毕后,能够直接调用下一个方法的一种特性。例如,在jQuery库中,可以这样使用链式调用来连续执行多个DOM操作: ```javascript $('#example').addClass('active').hide(); ``` 在...

    在JavaScript中实现链式调用的实现

    本文更多从链式调用方法返回值的角度,更进一步来说明如何实现链式调用。 什么是链式调用 链式调用在 JavaScript 语言界很常见,如 jQuery 、 Promise 等,都是使用的链式调用。链式调用可以让我们在进行连续...

    JavaScript链式调用实例浅析

    首先,链式调用的核心是使方法返回对象自身,这样在一个方法调用结束后,可以直接调用该对象上的其他方法,无需再存储对象引用。例如,jQuery库中的`$`函数就是一个典型示例。在给定的描述中,`$`函数被改造成了一个...

    mysqls一款专为node.js生成sql语句的插件链式调用使用灵活

    首先,链式调用是MySQLs的一个核心特性。这种方式允许开发者连续调用多个方法,形成一个流畅的代码结构,例如创建连接、选择表、添加查询条件、排序、分页等,都在一条链上完成,减少了代码的嵌套层次,提高了可读性...

    JavaScript交互式程序设计题库.doc

    - jQuery方法通常返回其自身,允许链式调用多个方法,如`$("#element").css("color", "red").fadeIn(500)`。 9. jQuery选择器扩展: - 使用CSS类选择器、ID选择器、属性选择器等,可以更精确地定位元素。例如,`$...

    javascript中的链式调用

    在JavaScript中,当一个对象的方法返回这个对象自身时,就可以实现链式调用。因为每次方法调用的结果还是对象本身,所以可以连续调用对象的其他方法。这种设计模式在对象的构建和操作中非常常见,尤其是在那些提供了...

    用于长度单位转换的JavaScript库

    由于`to()`方法返回的是`Length`实例,所以可以进行链式调用: ```javascript var centimeters = meters.to('cm'); // 将米转换回厘米 ``` ### 五、比较操作 `Length`对象还支持比较操作,如`lt`(小于),`gt`...

    浅谈链式编程

    1. **错误处理**:由于每个方法都必须返回对象自身以支持链式调用,这可能会使得在链中某一点抛出错误后难以捕获和处理。 2. **过长的链**:如果链式调用太长,可能会降低代码的可读性,因此应适当控制链的长度,...

Global site tag (gtag.js) - Google Analytics