如何设计一个支持方法链式调用的JavaScript库
2012-09-18 09:37 Barret李靖 阅读(396) 评论(0) 编辑 收藏 举报本文从ITeye导入
可以先了解下 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(); })(); */

版权声明: 署名-非商业性使用-禁止演绎 3.0 国际(CC BY-NC-ND 3.0)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义