jQuery 源码剖析 callbacks 原理
<button value="点我呀" id="btn">Button点击事件</button>
var cb = $.Callbacks(); cb.add(function(){ console.log("add one"); }); cb.add(function(){ console.log("add two"); }) cb.add(function(){ console.log("add three"); }) cb.fire(); cb.fire(); // once关键字 var cbOne = $.Callbacks('once'); cbOne.add(function(){ console.log("this is cbOne1 - "); }); cbOne.add(function(){ console.log("this is a cbOne2"); }); // 只执行一次下面fire()不执行 cbOne.fire();// this is cbOne1 - this is a cbOne2 cbOne.fire(); // unique 关键字 var cbUnique = $.Callbacks('unique'); function demo(){ console.log("this is a cbUnique - "); } function demo2() { console.log("this is a cbUnique2"); } cbUnique.add(demo,demo,demo2); // demo只输出一次 cbUnique.fire(); // this is a cbUnique - this is a cbUnique2 // stopOnFalse 关键字 // 不加关键字的情况 var cbDemo = $.Callbacks(); cbDemo.add(function(){ console.log("this is cbDemo 1 - "); return false; },function(){ console.log("this is cbDemo 2"); }) cbDemo.fire(); // this is cbDemo 1 - this is cbDemo 2 // 加关键字的情况 var cbStopOnFalse = $.Callbacks('stopOnFalse'); cbStopOnFalse.add(function(){ console.log("this is a cbStopOnFalse 1 - "); return false; },function(){ console.log("this is a cbStopOnFalse 2"); }); cbStopOnFalse.fire(); // this is a cbStopOnFalse 1 - // 参数 memory // 不加参数的情况 var cbNoMemory = $.Callbacks(); cbNoMemory.add(function(){ console.log("this is a cbNoMemory 1"); }); cbNoMemory.fire(); // this is a cbNoMemory 1 cbNoMemory.add(function (){ console.log("this is a cbNoMemory 2"); }); // 添加参数的情况 var cbMemory = $.Callbacks('memory'); cbMemory.add(function(){ console.log("this is a cbMemory 1 - "); }); cbMemory.fire(); // this is a cbMemory 1 - this is a cbMemory 2 cbMemory.add(function(){ console.log("this is a cbMemory 2"); }) // 一对多事件模型 function one(){ console.log("one"); }; function two(){ console.log("two"); }; function three(){ console.log("three"); }; function four(){ console.log("four"); }; var clickCallBack = [one,two,three,four]; $("#btn").click(function(){ var _this = this; clickCallBack.forEach(function(fn){ fn.call(_this); }) });
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论