熟悉Jquery的同学都知道,它对dom的操作基本都链式调用的写法,这种给人感觉就是很简洁,易懂,而且最大的好处就是避免多次重复使用一个对象变量。

链式的实现方式:
链式操作是在对象的方法中通过最后返回自身对象(return this),返回的对象就可以继续调用它里面的方法。那么,简单实现一下:

var o ={f:function(r){console.log(+new Date , r); return this;}};

o.f(1).f(2).f(3).f(4).f(5).f(6).f(7).f(8).f(9);

再例如:

var a = {
b: function(bb) {
console.log(bb);
return this;
},
c: function(cc) {
console.log(cc)
return this;
},
d: function(dd) {
console.log(dd)
return this;
}
}
a.b(1).c(2).d(3);

改造为工厂模式
通过一个函数,利用它来创建了一个对象,然后返回这个对象。代码如下:

function Obj() {}
Obj.prototype ={//扩展它的prototype
setNum:function (num) {
this.num = num;
return this;
},
fn_a:function(){
this.num++;
return this;
},
fn_b:function(pram){
this.num=this.num*pram;
return this;
},
getNum:function (){
return this.num;
},
};
function I() {//工厂函数
return new Obj();
}
var num=I().setNum(1).fn_a().fn_b(5).getNum();
console.log(num);

其实很简单就是通过return this实现的,当某个函数执行完毕,在把执行的结果返回,这样其他的函数就能继续调用了

原生js也是支持链式调用的,比如说:

    var arr = [1,2,3,4,5];
arr.reverse().join("").split();
console.log(arr);

在原生js中,链式调用还可以这样用

    function show(str) {
console.log(str);
return show;
}
show(123)(456)(789); // 控制台打印结果
//
//
//

我们发现,不写函数名称只写()也可以实现函数执行,那我们这样写可以不可以呢

    function show(str) {
console.log(str);
return show;
}(123)

原则上是可以的,但是这样不符合js语法,会报错

我们给函数外加上括号

    (function show(str) {
console.log(str);
return show;
})(123)(123)(123)(123)

这样就OK了,一个自执行的函数
但是这样写在严格模式下回报错,我们把函数赋值给一个变量就好了

   var a = (function show(str) {
console.log(str);
return show;
})(123)

*注意:自执行函数不会被内存机制回收

https://www.jianshu.com/p/a84093c9c144

https://www.cnblogs.com/JChen666/p/3614971.html

javascript 链式写法的更多相关文章

  1. JQuery事件的链式写法

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  2. jquery事件链式写法

    <!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  3. Javascript 链式作用域 function fn(){}和var fn=function(){}区别

    其实对于Javascript链式作用域的描述,包括,JS权威指南,都有些太冗长了--但是很准确:JavaScript中的函数运行在他们被定义的作用域里,而不是他们被执行的作用域里. 这句话有点难懂,但 ...

  4. Jquery | 基础 | 事件的链式写法

    $(".title").click(function () { $(this).addClass("curcol").next(".content&q ...

  5. Javascript 链式操作以及流程控制

    春节过后,感觉过年吃的油腻的食品转化的脂肪都长到 脑子去了. 根本转不动啊 上班第一天 实在是写不动代码了, 顺手打开多天为看的 收件箱,查看查看邮件,看看春节期间 风云变幻的前端圈又有哪些大事发生. ...

  6. Delphi Sysem.JSON 链式写法(转全能中间件)

    链式写法有很多优点:连贯.语意集中.简洁.一气呵成.可读性强.比如要把 3.1415926 中的 59 提取为一个整数:Pi.ToString().Substring(5,2).ToInteger() ...

  7. ajax操作的链式写法

    ajax操作的传统写法: $.ajax({ url: url, success: function(){ doWhenSuccess(); }, error: function(){ doWhenEr ...

  8. Java 链式写法

    Java链式写法,子类继承父类的属性,也可以返回子类的对象,只是需要重写基类的Set方法 public class MyLS { public static void main(String[] ar ...

  9. Delphi Sysem.JSON 链式写法

    链式写法有很多优点:连贯.语意集中.简洁.一气呵成.可读性强.比如要把 3.1415926 中的 59 提取为一个整数:Pi.ToString().Substring(5,2).ToInteger() ...

随机推荐

  1. 前端 HTML form表单标签 textarea标签 多行文本

    <textarea></textarea>作用:允许用户录入多行数据到表单控件中 <!DOCTYPE html> <html lang="en&qu ...

  2. cxImage控件使用

    属性: Picture:载入要显示的图片 Properties->Caption在没有内容的时候显示在图片框中间的文字 Properties->PopupMenuLayout->Me ...

  3. javascript篇-console.log()打印object却显示为字符串[object object]

    console.log打印对象遇到的一个问题,如下截图 打印结果与预期不符,原因是因为字符串‘a’和对象object拼接在一起,拼成了一个字符串

  4. Git的安装和配置用户名和密码

    在Windows中进行安装.访问https://git-scm.com/,点击Downloads for Windows,我下载的是Git-2.16.2-64-bit.exe.都按照默认选项即可,其中 ...

  5. (转)Springboot邮件服务

    springboot仍然在狂速发展,才五个多月没有关注,现在看官网已经到1.5.3.RELEASE版本了.准备慢慢在写写springboot相关的文章,本篇文章使用springboot最新版本1.5. ...

  6. python requests http请求

    导入模块 import requests import json header = {'Content-Type': 'application/json'} data = {"} data ...

  7. [Java in NetBeans] Lesson 12. Arrays

    这个课程的参考视频和图片来自youtube. 主要学到的知识点有: 1. Array: container that holds a fixed number of values of the sam ...

  8. 用URLRewriter重写url

    用url重新一般都是使用URLRewriter库,基本上都是一些配置,在webconfig中 首先配置configuration节点 <configSections> <sectio ...

  9. 记录一则完整的SPA(10g->11g)测试过程

    生产端:Windows 2008 + Oracle 10.2.0.5 测试端:RHEL 6.5 + Oracle 11.2.0.4 需求:因为Oracle跨越大版本,优化器.新特性变动较多,需要进行S ...

  10. nginx配置文件优化

    nginx配置优化     #定义Nginx运行的用户和用户组user  www  www: #启动工作进程,通常设置成和cpu的数量相等worker_processes  8:   最多开启8个,8 ...