1.petite-vue源码剖析-事件绑定v-on的源码工作原理
2.JQuery 的 deferred . promise对象
3.jqueryä¸deferredç¨çå¤å
4.deferred.then å deferred.done.fail çä¸å
petite-vue源码剖析-事件绑定v-on的工作原理
探索Petite-Vue的内部构造,从模板解析到事件绑定机制
在逐步了解Petite-Vue源码的源码过程中,我们从在线渲染开始,源码一步步剖析其响应式系统和安全沙箱模型。源码特别关注的源码是,它如何通过利用JavaScript引擎的源码android 文件浏览 源码SMI特性,优化依赖清理算法,源码这对于理解Vue3的源码内部运作至关重要。这无疑是源码一个理想的入门资源,对Vue3源码有深入了解的源码欲望,不容错过。源码
在Petite-Vue中,源码事件绑定作为一种指令(directives),源码如我们所熟知的源码@click,为开发者带来极大便利。源码点击元素时,框架会自动处理绑定,缘分 android 源码无需繁琐的jQuery操作,简化了开发流程。
解析模板时,walk方法会遍历元素的特性集合el.attributes。当遇到以v-on或@为前缀的属性时,会将名称和值加入deferred队列,策略上,事件绑定被置于最后处理,答题辅助源码这是因为整个元素和子元素的属性绑定、v-modal以及事件绑定需先完成,以确保正确顺序和执行时机。
深入理解了v-bind和v-on的工作原理后,让我们继续探索下一个关键部分——v-model。它如何协同工作,将为我们揭示Petite-Vue更为完整的内在逻辑。
JQuery 的驱动源码分析 deferred . promise对象
你说的这段描述是对 jQuery(selector).promise()的描述,并不是 jQuery.Deferred() 的描述。原文是:
Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.而这段话是说:
jQuery(selector).promise() 函数是返回一个 Promise 对象,这个对象的作用是当绑定到集合也就是$('div')这样取到的集合的指定类型的所有动作(promise方法的第一个参数 type ,默认是fx,也就是动画)是否已经完成了。英文水平有限,有些地方看不怎么懂,这话说得有点乱,eos io 源码不过意思应该是这样的,举个例子:
$('#message').animate({ width:, height:}, )
.promise()
.done(function(){
console.log('animate end');
});
也可以写成:
$('#message').animate({ width:, height:}, );var promise = $('#message').promise();
promise.done(function(){
console.log('animate end');
});
这里的 $('#message') 就是所说的collection,
而动画 animate (即 fx)就是 certain type,
里面的所有动作就是 action queue,当然,这里只有1个,就是默认的fx (但是文档中没有找到介绍其它的类型)。
后面的 var promise = xxx 就是指返回的 Promise对象,这个对象在收到animate 方法里面的信号(这个信号包括 resolve, reject, notify, resolveWith, rejectWith, and notifyWith等)可以调用方法done(当然还有不少其它的方法,这里没用到就不说了,自己看文档吧),然后执行done的回调函数了。
animate方法会自己发送promise的信号,不用手动去处理。具体细节可以参考 jQuery.Deferred() 方法,在API的介绍中有这个方法的使用示例。
需要注意的是, jQuery(selector).promise()和jQuery.Deferred().promise()是不一样的。
从目前我知道的来说,jQuery(selector).promise() 是专门用来处理jquery中的动画(animate)使用的,而jQuery.Deferred().promise()使用的范围更广,没看源码,不过猜一下,我觉得 jQuery(selector).promise()是jQuery在动画的时候对jQuery.Deferred().promise()的特殊实现(或者叫做功能封装)。
然后再说一下jQuery.Deferred().promise()吧。它的一般用法为:
var defer= $.Deferred();$.when(defer.promise()).then<done|fail|....>(参数...)
defer.resolve('传参数或留空');
defer.reject('传参数或留空');
defer.notify('传参数或留空');
// ..... 其它信号
实例请自己去看API页面。
上面的defer是一个延迟对象(deferred)引用,表示这个对象的信号会在将来发出。
接下来的 $.when(defer.promise()) 是指jQuery 要监视 defer的信号,收到信号后执行后面的then(或者done, fail或其它)的函数。而后面的defer.resolve<reject|notify>则是发出信号,通知jQuery延迟调用已经执行了,jQuery收到信号后,就去调用这个延迟的promise()后面的函数。
jqueryä¸deferredç¨çå¤å
å¼åç½ç«çè¿ç¨ä¸ï¼æ们ç»å¸¸éå°æäºèæ¶å¾é¿çjavascriptæä½ãå ¶ä¸ï¼æ¢æå¼æ¥çæä½ï¼æ¯å¦ajax读åæå¡å¨æ°æ®ï¼ï¼ä¹æåæ¥çæä½ï¼æ¯å¦éåä¸ä¸ªå¤§åæ°ç»ï¼ï¼å®ä»¬é½ä¸æ¯ç«å³è½å¾å°ç»æçã
é常ç解å³æ¹æ³æ¯ï¼ä¸ºå®ä»¬æå®åè°å½æ°ï¼callbackï¼ãå³äºå è§å®ï¼ä¸æ¦å®ä»¬è¿è¡ç»æï¼åºè¯¥è°ç¨åªäºå½æ°ã
ä½æ¯ï¼å¨åè°å½æ°æ¹é¢ï¼jQueryçåè½é常弱ã为äºæ¹åè¿ä¸ç¹ï¼jQueryå¼åå¢é就设计äºdeferred对象ã
ç®å说ï¼deferred对象就æ¯jQueryçåè°å½æ°è§£å³æ¹æ¡ã å¨è±è¯ä¸ï¼deferçæææ¯"延è¿"ï¼æ以deferred对象çå«ä¹å°±æ¯"延è¿"å°æªæ¥æ个ç¹åæ§è¡ã
deferred.then å deferred.done.fail çä¸å
ããthen()ådone().fail().process()çå·®å«æ¯
ããthen: function( /* fnDone, fnFail, fnProgress */ )ä¼çæä¸ä¸ªæ°çdeferredï¼return jQuery.Deferred(function( newDefer )ãåå§åè¿ä¸ªæ°deferredæ¶ï¼æ§è¡function( newDefer )ï¼è¿ä¸ªfunctionæ·»å ä¸ä¸ªcallback funcå°åä¸ä¸ªdeferredãè¿ä¸ªcallback funcæ¯ä»èdeferredå°æ°deferredçæ¡¥æ¢ï¼ä»deferred[ tuple[1]]å°newDefer[ tuple[0] + "With" ]ã对æ¼æ¯ä¸ªdeferred[ tuple[1] ]ï¼å¦ææ对åºçthenï¼ï¼æ带function( /* fnDone, fnFail, fnProgress ä¹ä¸*/ )ï¼è¿ä¸ªå½æ°å°±æ¯
ããfunction () {
ããvar returned = fn.apply( this, arguments );
ããif ( returned && jQuery.isFunction( returned.promise ) ) {
ããreturned.promise()
ãã.done( newDefer.resolve )
ãã.fail( newDefer.reject )
ãã.progress( newDefer.notify );
ãã} else {
ããnewDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, [ returned ] );
ãã}
ãã}
ããthenæ带å½æ°ä¼è¢«æ§è¡ï¼è¿åreturnedï¼å¦æjQuery.isFunction( returned.promise )ï¼åè°ç¨è¿ä¸ªreturned.promiseçdoneãfailåprogressï¼å®ä»¬ä¼å¯¹åºè§¦ånewDeferçresolveãrejectãnotifyï¼ å¦å returned ä¼ å ¥æ°çdeferredï¼newDeferæ§è¡action ï¼ âwithâï¼
ããå¦æ没æ对åºçthenï¼ï¼æ带å½æ°ï¼ç®åæ§è¡newDefer[ action ]ã
ããä¸é¢ç第ä¸ä¸ªresultæ¯ç¬¬ä¸ä¸ªresultçæåä¸ä¸ªdone()çè¾åºï¼åä¸ä¸ªdoneçreturnä¸ä¼ä¼ éå°è¿éï¼æ以resultæ¯resolveç第ä¸ä¸ªåæ°ã
ãã第äºä¸ªresultæ¯ç¬¬äºä¸ªdeferredçè¾åºï¼ç¬¬ä¸ä¸ªthenæ带çfunctionçè¾å ¥ï¼ä¼ å ¥ç¬¬äºä¸ªdeferredï¼å æ¤ç¬¬äºä¸ªdoneè½å¤æ¥åå°2*3çresultã
ãã第ä¸ä¸ªresultæ¯ç¬¬ä¸ä¸ªdeferredçè¾åºï¼ç¬¬äºä¸ªthenæ§è¡æ¶ï¼åªæaï¼æ²¡æbï¼æ以resultæ¯NaNã