《javascript设计模式》笔记之第六章:方法的链式调用
这一章要实现的就是jQuery的那种链式调用,例子:
- $(this).setStyle('color', 'green').show();
- function $() {
- var elements = [];
- for (var i = , len = arguments.length; i < len; ++i) {
- var element = arguments[i];
- if (typeof element == 'string') {
- element = document.getElementById(element);
- }
- if (arguments.length == ) {
- return element;
- }
- elements.push(element);
- }
- return elements;
- }
- (function() {
- // Use a private class.
- function _$(els) {
- this.elements = [];
- for (var i = , len = els.length; i < len; ++i) {
- var element = els[i];
- if (typeof element == 'string') {
- element = document.getElementById(element);
- }
- this.elements.push(element);
- }
- }
- // The public interface remains the same.
- window.$ = function() {
- return new _$(arguments);
- };
- })();
- (function() {
- function _$(els) {
- // ...
- }
- _$.prototype = {
- each: function(fn) {
- for ( var i = , len = this.elements.length; i < len; ++i ) {
- fn.call(this, this.elements[i]);
- }
- return this;
- },
- setStyle: function(prop, val) {
- this.each(function(el) {
- el.style[prop] = val;
- });
- return this;
- },
- show: function() {
- var that = this;
- this.each(function(el) {
- that.setStyle('display', 'block');
- });
- return this;
- },
- 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);
- });
- return this;
- }
- };
- window.$ = function() {
- return new _$(arguments);
- };
- })();
- $('test-1', 'test-2').show().
- setStyle('color', 'red').
- addEvent('click', function(e) {
- $(this).setStyle('color', 'green');
- });
- Function.prototype.method = function(name, fn) {
- this.prototype[name] = fn;
- return this;
- };
- (function() {
- function _$(els) {
- // ...
- }
- /* Events * addEvent * getEvent */
- _$.method('addEvent', function(type, fn) {
- // ...
- }).method('getEvent', function(e) {
- // ...
- }).
- /* DOM * addClass * removeClass * replaceClass * hasClass * getStyle * setStyle */
- method('addClass', function(className) {
- // ...
- }).method('removeClass', function(className) {
- // ...
- }).method('replaceClass', function(oldClass, newClass) {
- // ...
- }).method('hasClass', function(className) {
- // ...
- }).method('getStyle', function(prop) {
- // ...
- }).method('setStyle', function(prop, val) {
- // ...
- }).
- /* AJAX * load. Fetches an HTML fragment from a URL and inserts it into an element. */
- method('load', function(uri, method) {
- // ...
- });
- window.$ = function() {
- return new _$(arguments);
- });
- })();
- Function.prototype.method = function(name, fn) {
- // ...
- };
- (function() {
- function _$(els) {
- // ...
- }
- _$.method('addEvent', function(type, fn) {
- // ...
- })
- // ...
- window.installHelper = function(scope, interface) {
- scope[interface] = function() {
- return new _$(arguments);
- }
- };
- })();
- installHelper(window, '$');
- $('example').show();
- window.API2 = window.API2 || {};
- API2.prototype = function() {
- var name = 'Hello world';
- // Privileged mutator method.
- setName: function(newName) {
- name = newName;
- return this;
- },
- // Privileged accessor method.
- getName: function(callback) {
- callback.call(this, name);
- return this;
- }
- }();
- var o2 = new API2;
- o2.getName(console.log).setName('Meow').getName(console.log);
《javascript设计模式》笔记之第六章:方法的链式调用的更多相关文章
- JavaScript设计模式——方法的链式调用
方法的链式调用: (function() { //私有类 function _$ (els) { this.elements = []; for(var i = 0, len = els.length ...
- 如何写 JS 的链式调用 ---》JS 设计模式《----方法的链式调用
1.以$ 函数为例.通常返回一个HTML元素或一个元素集合. 代码如下: function $(){ var elements = []; ;i<arguments.length;i++){ v ...
- js实现方法的链式调用
假如这里有三个方法:person.unmerried();person.process();person.married();在jQuery中通常的写法是:person.unmerried().pro ...
- PHP 设计模式 笔记与总结(4)PHP 链式操作的实现
PHP 链式操作的实现 $db->where()->limit()->order(); 在 Common 下创建 Database.php. 链式操作最核心的地方在于:在方法的最后 ...
- JS设计模式——6.方法的链式调用
什么是链式调用 这个很容易理解,例如: $(this).setStyle('color', 'red').show(); 分解链式调用 链式调用其实是两个部分: 1.操作对象(也就是被操作的DOM元素 ...
- Javascript设计模式笔记
Javascript是越来越厉害了,一统前后端开发.于是最近把设计模式又看了一遍,顺便做了个笔记,以方便自己和他人共同学习. 笔记连载详见:http://www.meteorcn.net/wordpr ...
- 浅析 JavaScript 链式调用
对$函数你已经很熟悉了.它通常返回一个html元素或一个html元素的集合,如下: function$(){ var elements = []; for(vari=0,len=arguments.l ...
- 《HTTP 权威指南》笔记:第十六章&第十七章 国际化、内容协商与转码
<HTTP 权威指南>笔记:第十六章 国际化 客户端通过在请求报文中的 Accept-Language 首部和 Accept-Charset 首部来告知服务器:“我理解这些语言.”服务器通 ...
- [书籍翻译] 《JavaScript并发编程》第六章 实用的并发
本文是我翻译<JavaScript Concurrency>书籍的第六章 实用的并发,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript ...
随机推荐
- js日期和时间戳互换
<script> function js_strto_time(str_time){ var new_str = str_time.replace(/:/g,'-'); new_str = ...
- oracle 左右链接
数据表的连接有: 1.内连接(自然连接): inner只有两个表相匹配的行才能在结果集中出现 2.外连接: 包括 (1)左外连接(左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接 ...
- 「LOJ#103」子串查找 (Hash
题目描述 这是一道模板题. 给定一个字符串 A A A 和一个字符串 B B B,求 B B B 在 A A A 中的出现次数.AAA 和 BBB 中的字符均为英语大写字母或小写字母. A A A 中 ...
- Field 'CID' doesn't have a default value
解决:在数据库客户端navicat中设计表勾选自动递增
- 前端调用后端接口返回200(成功状态码),后端有返回,但是控制台Network Response为空,没展示任何信息
解决方法: 1.在js里面debugger,可以看到后台是否有返回数据. 2.直接console.log(),直接把返回值打印出来,查看返回的数据格式,方便前端进行数据的处理. PS:因为后端返回的数 ...
- Mutual information and Normalized Mutual information 互信息和标准化互信息
实验室最近用到nmi( Normalized Mutual information )评价聚类效果,在网上找了一下这个算法的实现,发现满意的不多. 浙江大学蔡登教授有一个,http://www.zju ...
- sip协议呼叫流程详解
1.SIP业务基本知识 1.1 业务介绍会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始.管理和终止网络中的语音和视频会话,具体地说就是用来生成.修改和终 ...
- 【转】cache buffer chain 第一篇
文章转自:http://www.jydba.net/cache-buffer-chain/ buffer cache的管理有两个重要的数据结构: hash bucket和cache buffer ch ...
- 使用IntelliJ IDEA配置Tomcat(入门)
一.下载Tomcat 1.进入官网http://tomcat.apache.org/,选择download,下载所需Tomcat版本. 此处我们选择下载最新版本Tomcat 9. 注意有zip和exe ...
- 反射invoke()方法
invoke()方法: 主要是为了类反射,可以在不知道具体类的情况下,根据配置字符串去调用一个类的方法.最简单的方法是可以把方法参数化. main.invoke(): 比如Test类里有 ...