熟悉jquery的同学都知道,它对dom的操作基本都链式调用的写法,这种给人感觉就是很简洁,易懂,而且最大的好处就是避免多次重复使用一个对象变量。
链式的实现方式:
链式操作是在对象的方法中通过最后返回自身对象(return this),返回的对象就可以继续调用它里面的方法。那么,简单实现一下:
var Obj={
num: 1,
fn_a: function(){
this.num++;
return this;
},
fn_b:function(pram){
this.num=this.num*pram;
return this;
},
}
Obj.fn_a().fn_b(5);
console.log(Obj.num);//输出10
上面代码Obj.fn_a().fn_b(5);可以分解为:
//Obj.fn_a().fn_b(5);
var a=Obj.fn_a();
a=a.fn_b(5);
console.log(a.num);//输出10
由于所有对象都会继承其原型对象的属性和方法,所以我们可以让定义在原型对象中的那些方法都返回用以调用方法的实例对象的引用,这样就可以对那些方法进行链式调用了。 那么jq是如何实现链式写法的呢?介绍下jq是如何实现链式写法的,例如:
jQuery = function (selector, context) {
return new jQuery.fn.init(selector, context, rootjQuery);
},
jQuery.fn = jQuery.prototype = {}
jQuery.fn.init.prototype = jQuery.fn;
可以看出jquery中return了一个实例,init函数里进行了处理初始化操作,比如选择器,拼接字符串等等,最后再将jq的prototype 赋值给init方法的prototype。
改造为工厂模式
通过一个函数,利用它来创建了一个对象,然后返回这个对象。代码如下:
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);
Promise异步链式
Promise的出现其实是作为异步编程的一种解决方案。比传统的解决方案-回调函数和事件-更加合理、强大。 下面就简单讲解一下它的异步链式的写法,例如:
function fn_a(num) {
return new Promise(function (resolve, reject) {
if(num!= undefined){
num=num+1;
setTimeout(resolve(num), 500);
}else{//错误
reject("num未定义");
}
});
}
function fn_b(num,parm) {
return new Promise(function (resolve, reject) {
num=num*parm;
setTimeout(resolve(num), 1000);
});
}
fn_a(1).then(num=>{
return fn_b(num,5);
},error=>{
console.log(error);
}).then(num=>{
console.log(num);//在1.5秒回返回10
})
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
这篇文章主要介绍了PHP实现链式操作的三种方法,结合实例形式分析了php链式操作的相关实现技巧与使用注意事项,需要的朋友可以参考下,本文实例讲述了PHP实现链式操作的三种方法。分享给大家供大家参考,具体如下:
熟悉Jquery的同学都知道,它对dom的操作基本都链式调用的写法,这种给人感觉就是很简洁,易懂,而且最大的好处就是避免多次重复使用一个对象变量。链式操作是在对象的方法中通过最后返回自身对象(return this),返回的对象就可以继续调用它里面的方法
then方法里接受两个函数作为参数,分别是resolve和reject后执行的回调,他返回的是一个新的Promise实例(不是原来那个Promise实例)。return 值的情况(无return的情况下就返回undefined,也是返回值)
链式调用原理就是作用域链;实现需要做的工作;对象方法的处理 (操作方法),处理完成返回对象的引用(操作对象),第2步链式实现的方式:
对于对象的属性存在性检测一直是我们判断条件几乎每天遇到的,但是你是否又在具有‘坏味道’ 代码很绝望,现在我们提供几种处理‘坏味道’ 对象链式取值方式
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!