博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
链式调用方法
阅读量:6371 次
发布时间:2019-06-23

本文共 2355 字,大约阅读时间需要 7 分钟。

javascript链式调用方法,是个有用的小技巧,可以节省大量的代码,看下例子:

(function(arg){            alert(arg)            return arguments.callee;        })('第一次')('第二次')

当然,把方法加进去,我们还可以扩展如下:

(function(fn,arg){            var args = Array.prototype.slice.call(arguments);            args.shift().apply(null,args);            return arguments.callee;        })(function(a,b){alert(a+b)},3,5)(function(a,b){alert(a-b)},12,5)

我们可以做一个链式调用工具函数:

function chain(obj){    return function(){        var Self = arguments.callee; Self.obj = obj;        if(arguments.length==0){            return Self.obj;        }         Self.obj[arguments[0]].apply(Self.obj,[].slice.call(arguments,1));        return Self;    }}//定义的function/类ClassBfunction ClassB(){    this.prop1 = null;    this.prop2 = null;    this.prop3 = null;}ClassB.prototype = {    method1 : function(p1){        this.prop1 = p1;    },    method2 : function(p2){        this.prop2 = p2;    },    method3 : function(p3){        this.prop3 = p3;    }}var obj = new ClassB();    chain(obj).('method1',4).('method2',5).('method3',6)

如果对于一个对象,我们可以这样:

 再看一个从库里简化出来的一个链式调用:

(function(){    function extend(obj){        (function(){        //        this.append=function(obj){            this.appendChild(obj);            return this;        }        //        this.appendTo=function(obj){            obj.appendChild(this);            return this;        }        //        this.attr=function(a,b){            if(a instanceof Object){                for(var x in a){                    this.setAttribute(x,a[x]);                }            }else{                this.setAttribute(a,b);            }            return this;        }        //        this.css=function(a,b){            if(a instanceof Object){                for(var x in a){                    this.style[x]=a[x];                }            }else{                this.style[a]=b;            }            return this;        }                //        this.html=function(str){            if( typeof str =='undefined'){                return this.innerHTML;            }            this.innerHTML=str;            return this;        }        }).apply(obj);                return obj;    }    window.$c=function(str){        return extend(document.createElement(str));    }})();$c('div').appendTo(document.body).attr('name','testName').html('ddddd').css('color','#f00')

 

 

转载地址:http://sfuqa.baihongyu.com/

你可能感兴趣的文章
vue proxy匹配规则
查看>>
线上应用故障排查之一:高CPU占用
查看>>
Extend Volume 操作 - 每天5分钟玩转 OpenStack(56)
查看>>
IronPython教程
查看>>
squid via检测转发循环
查看>>
计算分页
查看>>
iptables 做nat路由器脚本
查看>>
数据结构(C语言版)第三章:栈和队列
查看>>
Stopping and/or Restarting an embedded Jetty in...
查看>>
Oracle存储过程中的数据集输入参数
查看>>
vsftp 配置
查看>>
VCSA中配置时间和时区,实测至6.5适用
查看>>
高并发IM系统架构优化实践
查看>>
产品经理教你玩转阿里云负载均衡SLB系列(一):快速入门--什么是负载均衡
查看>>
有关linux--进程组、会话、守护进程详解
查看>>
我的友情链接
查看>>
monkeyrunner运行Python脚本来检查apk渠道和验证是否可以调用微信
查看>>
github获得SSH Key解决Permission denied (publickey)问题
查看>>
用java代码编写Oracle存储过程
查看>>
APACHE转发
查看>>