js是基于原型的面向对象语言,如果你学过java,c#等正统面向对象语言,你会难以理解js的面向对象,他和普通的面向对象不太一样,今天,我们通过封装一个toast插件,来看看js面向对象是如何运行的。

html

<div id="toast"></div>

css

* {
margin:;
padding:;
} #toast {
position: absolute;
display: none;
left: 50%;
top: 50%;
z-index:;
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核心代码

 (function() {
/***
* 信息提示组件Toast v1.0
* @param {Object} container 内容容器(必填)
* @param {Object} content 文字内容(可选)
* @param {Object} duration 显示时长(可选)
* 使用方法
* var toast = new Toast("toast", "你好,对话框");
* toast.show();(支持回调函数)
*/
function Toast(container, content, duration) {
this.container = document.getElementById(container);
this.content = content || "这是一段对话";
this.duration = duration || 2000;
} Toast.prototype.show = function(callback) {
this.callback = callback || function() {};
this.container.style.opacity = 1;
this.container.style.display = "block";
this.container.innerHTML = this.content; setTimeout(function() {
this.callback && this.callback();
this.hide();
}.bind(this), this.duration); return this;
} Toast.prototype.hide = function(callback) {
this.callback = callback || function() {}; this.container.style.display = "none";
this.callback && this.callback();
return this;
} window.Toast = Toast; })(window);

Toas函数是一个构造函数,相当于面向对象语言中的类(class),并且有形参,函数内部代码相当于给成员变量赋值。通常在这里初始化成员变量,这就好理解了。接下里的show,hide方法都是在Toast上的原型上添加共有的方法,对应的是修饰词为public的一个成员方法。函数最后都会返回this(当前函数执行的上下文),是为了可以进行链式调用。这些方法都支持回调函数,当函数执行完毕后会执行传入的回调函数,这在编写插件的时候通常都会用到,比如说ajax请求完成后,你得到返回的数据,并且需要后续操作,这时就要用回调函数。因为代码都放在闭包环境下,外界访问不了里面的变量和方法,所以把Toast强行暴露出去,就可以在window访问到。

最新文章

  1. 【Android】NavigationView头部点击监听事件
  2. rosetta2014/2015安装时出现INCLUDE(keyerror)错误,解决。
  3. 税收基础知识 &gt; 三税(营业税, 增值税, 所得税) + 关税
  4. Oracle Profile 使用
  5. 3-cd 命令总结
  6. ch2-4:遇到嵌套列表进行缩进打印
  7. Poj/OpenJudge 1042 Gone Fishing
  8. RAW模板命名规范
  9. RNN的介绍
  10. Python距离放弃又近了Day02
  11. 谓词逻辑 p-&gt;q 的真假
  12. RabbitMQ基础知识详解
  13. Centos 7 下 Zabbix 3.4.x 服务搭建
  14. 解决IntelliJ IDEA控制台乱码问题[包含程序运行时的log4j日志以及tomcat日志乱码]
  15. SQLServer中获取所有数据库名、所有表名、所有字段名的SQL语句
  16. 1-2Html与CSS的关系
  17. 解决MAC下ctags -R无效的问题
  18. windows下gitlab配置 生成ssh key
  19. bzoj 1798 双标记区间修改线段树
  20. sql server2008 跨服务器之间复制表数据

热门文章

  1. Corosync+Pacemaker+crmsh构建Web高可用集群
  2. Linux内核分析实验二:mykernel实验指导(操作系统是如何工作的)
  3. nginx 配置 phpmyadmin
  4. Java之Junit和反射
  5. Java入门系列:处理Json格式数据
  6. numpy二进制转换和范围缩放
  7. Kafka 0.8 Producer处理逻辑
  8. windows查找端口占用/ 终结端口占用 ------------windows小技巧
  9. Java并发编程原理与实战二十一:线程通信wait&amp;notify&amp;join
  10. 推荐一些我所用的firefox 附加组件。