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访问到。

用js面向对象思想封装插件的更多相关文章

  1. 原生JS面向对象思想封装轮播图组件

    原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...

  2. 个人对js面向对象和封装插件的用法

    做了一段时间的前端了,给自己写代码也总结出来了一点小小的思路,就来分享一下自己的意见和建议了. 面向对象和插件封装其实说到底都是面向对象的思想,但是插件一般是你要用的时候就new 调用出来的.就说一下 ...

  3. 使用面向对象思想封装js(附实例)

    平时在写js时应该用面向对象思想将每一组功能封装成一个模块,可实现模块间的高内聚低耦合.重用.结构清晰........... 如果页面中逻辑复杂.功能多,不使用模块封装是不可想象的,维护起来非常复杂. ...

  4. JS面向对象(封装,继承)

    在六月份找工作中,被问的最多的问题就是: js面向对象,继承,封装,原型链这些,你了解多少? 额,,,我怎么回答呢, 只能说,了解一些,不多不少,哈哈哈哈,当然,这是玩笑话. 不过之前学过java,来 ...

  5. 原生js日历选择器,学习js面向对象开发日历插件

    在web开发过程中经常会碰到需要选择日期的功能,一般的操作都是在文本框点击,然后弹出日历选择框,直接选择日期就可以在文本框显示选择的日期.开发好之后给用户使用是很方便,但如果每一个日历选择器都要临时开 ...

  6. Js 面向对象之封装,继承,原型,原型链

    封装 ,继承 ,原型, 原型链 封装 ? 面向对象有三大特性,封装.继承和多态.对于ES5来说,没有class(类)的概念,并且由于JS的函数级作用域(函数内部的变量在函数外访问不到),所以我们就可以 ...

  7. JS面向对象思想(OOP)

    直接看js好了,模拟创建一个奥运会 function 奥运会Class(主题) { // 删除主题 // delete this.主题; this.主题 = 主题; this.开幕时间; this.闭 ...

  8. 实例了解js面向对象的封装和继承等特点

    1.面向对象特点 相比之前按照过程式写法,面向对象有以下几个特点; 1.抽象:抓住核心问题,就是将很多个方法放在一个对象上.对象由属性和方法组成,属性就是我们定义的变量,它是静态的:方法就是行为操作, ...

  9. 利用面向对象思想封装Konva动态进度条

    1.html代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

随机推荐

  1. 利用java实现可远程执行linux命令的小工具

    在linux的脚本中,如果不对机器做其他的处理,不能实现在linux的机器上执行命令.为了解决这个问题,写了个小工具来解决这个问题. 后面的代码是利用java实现的可远程执行linux命令的小工具,代 ...

  2. 【bzoj1937】 Shoi2004—Mst 最小生成树

    http://www.lydsy.com/JudgeOnline/problem.php?id=1937 (题目链接) 题意 一个无向图,给出一个生成树,可以修改每条边的权值,问最小修改多少权值使得给 ...

  3. 一次lvs迁移记录

    需求:从117.119.33.99迁移到122.14.206.125,lvs为dr模式,系统版本为debian7 1.安装lvs和keepalived # aptitude install -y ip ...

  4. ListView嵌套webView 事件冲突解决

    如图,红色部分为WebView,作为ListView头部存在,测试视频(h5)要左右滑动,ListView要上下滑动,保证视频控件和下面评论部分可以显示,但是这个时候就存在WebView横向滑动和Li ...

  5. kafka 多线程消费

    一. 1.Kafka的消费并行度依赖Topic配置的分区数,如分区数为10,那么最多10台机器来并行消费(每台机器只能开启一个线程),或者一台机器消费(10个线程并行消费).即消费并行度和分区数一致. ...

  6. Codeforces Round #532

    以后不放水题了 C.NN and the Optical Illusion 复习一下高中数学即可 $\frac{ans}{ans+r}=\sin \frac{\pi}{n}$ 解方程 #include ...

  7. 使用spring cache和ehcache

    一.spring cache Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该 ...

  8. bzoj千题计划162:bzoj2006: [NOI2010]超级钢琴

    http://www.lydsy.com/JudgeOnline/problem.php?id=2006 输出最大的k个 sum[r]-sum[l-1] (L<=r-l+1<=R) 之和 ...

  9. 关于thinkpad安装win10操作系统

    thinkpad预装的是win8或者win10,会有自己的分区方式是GPT,所以会出现两个引导分区. F2进入tinkpad的bios,F12进入启动选项 我们用pe进入后,用分区工具删除两个分区,然 ...

  10. java学习第01天(搭建环境配置)

    搭建环境配置分为3个步骤 1.下载并安装 jdk使用1.8.0_151版本,下载地址(包含32位和64位):链接:https://pan.baidu.com/s/1qZau8oO 密码:0t5o 2. ...