用js面向对象思想封装插件
js是基于原型的面向对象语言,如果你学过java,c#等正统面向对象语言,你会难以理解js的面向对象,他和普通的面向对象不太一样,今天,我们通过封装一个toast插件,来看看js面向对象是如何运行的。
html
<div id="toast"></div>
css
* { margin: 0; padding: 0; } #toast { position: absolute; display: none; left: 50%; top: 50%; z-index: 99999; margin: 0 auto; -webkit-transform: translate(-50%); transform: translate(-50%); width: 50%; padding: 5px; border-radius: 5px; text-align: center; color: #fff; background-color: #000; }
使用方法
var toast = new Toast("toast", "你好,对话框"); toast.show();
js核心代码
1 (function() { 2 /*** 3 * 信息提示组件Toast v1.0 4 * @param {Object} container 内容容器(必填) 5 * @param {Object} content 文字内容(可选) 6 * @param {Object} duration 显示时长(可选) 7 * 使用方法 8 * var toast = new Toast("toast", "你好,对话框"); 9 * toast.show();(支持回调函数) 10 */ 11 function Toast(container, content, duration) { 12 this.container = document.getElementById(container); 13 this.content = content || "这是一段对话"; 14 this.duration = duration || 2000; 15 } 16 17 Toast.prototype.show = function(callback) { 18 this.callback = callback || function() {}; 19 this.container.style.opacity = 1; 20 this.container.style.display = "block"; 21 this.container.innerHTML = this.content; 22 23 setTimeout(function() { 24 this.callback && this.callback(); 25 this.hide(); 26 }.bind(this), this.duration); 27 28 return this; 29 } 30 31 Toast.prototype.hide = function(callback) { 32 this.callback = callback || function() {}; 33 34 this.container.style.display = "none"; 35 this.callback && this.callback(); 36 return this; 37 } 38 39 window.Toast = Toast; 40 41 })(window);
Toas函数是一个构造函数,相当于面向对象语言中的类(class),并且有形参,函数内部代码相当于给成员变量赋值。通常在这里初始化成员变量,这就好理解了。接下里的show,hide方法都是在Toast上的原型上添加共有的方法,对应的是修饰词为public的一个成员方法。函数最后都会返回this(当前函数执行的上下文),是为了可以进行链式调用。这些方法都支持回调函数,当函数执行完毕后会执行传入的回调函数,这在编写插件的时候通常都会用到,比如说ajax请求完成后,你得到返回的数据,并且需要后续操作,这时就要用回调函数。因为代码都放在闭包环境下,外界访问不了里面的变量和方法,所以把Toast强行暴露出去,就可以在window访问到。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!