熟悉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);
// 控制台打印结果
// 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)
*注意:自执行函数不会被内存机制回收
javascript方法的链式调用,使用它能让代码很简洁,易懂,而且最大的好处就是避免多次重复使用一个对象变量。 包括工厂模式的写法,Promise异步链式 等做说明。
这篇文章主要介绍了PHP实现链式操作的三种方法,结合实例形式分析了php链式操作的相关实现技巧与使用注意事项,需要的朋友可以参考下,本文实例讲述了PHP实现链式操作的三种方法。分享给大家供大家参考,具体如下:
then方法里接受两个函数作为参数,分别是resolve和reject后执行的回调,他返回的是一个新的Promise实例(不是原来那个Promise实例)。return 值的情况(无return的情况下就返回undefined,也是返回值)
链式调用原理就是作用域链;实现需要做的工作;对象方法的处理 (操作方法),处理完成返回对象的引用(操作对象),第2步链式实现的方式:
对于对象的属性存在性检测一直是我们判断条件几乎每天遇到的,但是你是否又在具有‘坏味道’ 代码很绝望,现在我们提供几种处理‘坏味道’ 对象链式取值方式
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!