jQuery 源码剖析 callbacks 原理

发布于 2022-03-07 12:50:37 字数 2233 浏览 909 评论 0

<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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文