用js面向对象思想封装插件
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面向对象思想封装插件的更多相关文章
- 原生JS面向对象思想封装轮播图组件
原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...
- 个人对js面向对象和封装插件的用法
做了一段时间的前端了,给自己写代码也总结出来了一点小小的思路,就来分享一下自己的意见和建议了. 面向对象和插件封装其实说到底都是面向对象的思想,但是插件一般是你要用的时候就new 调用出来的.就说一下 ...
- 使用面向对象思想封装js(附实例)
平时在写js时应该用面向对象思想将每一组功能封装成一个模块,可实现模块间的高内聚低耦合.重用.结构清晰........... 如果页面中逻辑复杂.功能多,不使用模块封装是不可想象的,维护起来非常复杂. ...
- JS面向对象(封装,继承)
在六月份找工作中,被问的最多的问题就是: js面向对象,继承,封装,原型链这些,你了解多少? 额,,,我怎么回答呢, 只能说,了解一些,不多不少,哈哈哈哈,当然,这是玩笑话. 不过之前学过java,来 ...
- 原生js日历选择器,学习js面向对象开发日历插件
在web开发过程中经常会碰到需要选择日期的功能,一般的操作都是在文本框点击,然后弹出日历选择框,直接选择日期就可以在文本框显示选择的日期.开发好之后给用户使用是很方便,但如果每一个日历选择器都要临时开 ...
- Js 面向对象之封装,继承,原型,原型链
封装 ,继承 ,原型, 原型链 封装 ? 面向对象有三大特性,封装.继承和多态.对于ES5来说,没有class(类)的概念,并且由于JS的函数级作用域(函数内部的变量在函数外访问不到),所以我们就可以 ...
- JS面向对象思想(OOP)
直接看js好了,模拟创建一个奥运会 function 奥运会Class(主题) { // 删除主题 // delete this.主题; this.主题 = 主题; this.开幕时间; this.闭 ...
- 实例了解js面向对象的封装和继承等特点
1.面向对象特点 相比之前按照过程式写法,面向对象有以下几个特点; 1.抽象:抓住核心问题,就是将很多个方法放在一个对象上.对象由属性和方法组成,属性就是我们定义的变量,它是静态的:方法就是行为操作, ...
- 利用面向对象思想封装Konva动态进度条
1.html代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
随机推荐
- 使用regsrv32.exe绕过应用程序白名单(多种方法)
0x00 regsvr简介 regsvr32表示Microsoft注册服务.它是Windows的命令行实用工具.虽然regsvr32有时会导致问题出现,但它是Windows系统文件中的一个重要文件.该 ...
- bzoj 4332:JSOI2012 分零食
描述 这里是欢乐的进香河,这里是欢乐的幼儿园. 今天是2月14日,星期二.在这个特殊的日子里,老师带着同学们欢乐地跳着,笑着.校长从幼儿园旁边的小吃店买了大量的零食决定分给同学们.听到这个消息,所有同 ...
- bzoj5016 一个简单的询问
这种不可直接做的问题 数据范围又很小 考虑莫队 但是,l1,l2,r1,r2四维? 考虑把询问二维差分! f(a,b)表示,询问[1,a],[1, b]的答案 所以,ans(l1,r1,l2,y2)= ...
- laravel 命令行输出进度条
有时候我们想在命令行执行一些耗时的命令,我们可以利用 symfony 提供的进度条相关的类,来输出一个进度条,显示当前的处理进度. 参考:http://symfony.com/doc/current/ ...
- git更换 拉取推送地址
更换:git remote set-url originhttp://git.caomall.cn/sucry/mouse.git」
- socket利用多线程实现一对多通信
1.服务器端:socket()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接.将accept()写入死循环,每次连接一个客户端,开一个线程. 2.一般情况下建立s ...
- 转:RAC中比较replay, replayLast, and replayLazily
A co-worker recently asked me about the difference between -replay, -replayLast, and -replayLazily i ...
- 线程中wait/notify/notifyAll的用法
前言 多线程时,最关注的就是线程同步,线程间的同步一般用锁来实现,常见的锁就是synchronized和lock.用了synchronized,就不得不提到wait/notify/notifyAll. ...
- bzoj千题计划170:bzoj1968: [Ahoi2005]COMMON 约数研究
http://www.lydsy.com/JudgeOnline/problem.php?id=1968 换个角度 一个数可以成为几个数的约数 #include<cstdio> #incl ...
- sql 存储时空格转成问号问题
最近做系统,从邮件中导出邮件,上传到系统中,遇到一个奇葩的问题,如下: 通过本地文件看,文件名中是一个空格,上传至数据库后,展示就变成了问号,究其原因,发现是一个特殊字符导致: 最近认真去查了一下这个 ...