使用面向对象思想封装js(附实例)
平时在写js时应该用面向对象思想将每一组功能封装成一个模块,可实现模块间的高内聚低耦合、重用、结构清晰...........
如果页面中逻辑复杂、功能多,不使用模块封装是不可想象的,维护起来非常复杂。
举个栗子,比如页面中的登录弹窗:封装弹窗代码,外界代码订阅弹窗内的事件(登录、注册...)

function LoginBox() {
if (!(this instanceof LoginBox)) {
return new LoginBox();
}
var _this = this;
var _cache = {
$loginWindow: $("#box")
};
var _eventNames = ["loginSuccess", "registSuccess"];
var _events = { "loginSuccess": [], "registSuccess": [] };
//触发登录成功事件
var _onLoginSuccess = function () {
var funcs = _events["loginSuccess"];
for (var i = 0, len = funcs.length; i < len; i++) {
funcs[i].call(this, _returnUrl, _loginCallBack);
}
_this.hide();
};
//绑定事件
var _initEvents = function () {
$.bindEvent({
bindInfo: [
{ "#buttonLogin": "click buttonLoginClick" },
{ "#buttonReg": "click buttonRegClick" },
],
buttonLoginClick: function () {
//异步登录,登录成功调用
_onLoginSuccess();
},
buttonRegClick: function () {
//注册成功
_onLoginSuccess();
}
},
});
};
//外部添加事件
this.on = function (eventName, func) {
if (_eventNames.indexOf(eventName) > -1) {
_events[eventName].push(func);
}
};
this.show = function (returnUrl, guestReturnUrl, isShowGuest, loginCallBack) {
//显示登录弹窗逻辑....
};
this.hide = function () {
//隐藏登录弹窗逻辑...
};
$(function () {
_initEvents();
});
}
-----------------------------------------
外部调用:
var loginBox = new LoginBox();
loginBox.show();//显示登录弹窗
loginBox.hide();//隐藏登录弹窗
loginBox.on("loginSuccess", function () {
alert("登录成功啦");
});
loginBox.on("registSuccess", function () {
alert("注册成功啦");
});
使用面向对象思想封装js(附实例)的更多相关文章
- 原生JS面向对象思想封装轮播图组件
原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...
- 用js面向对象思想封装插件
js是基于原型的面向对象语言,如果你学过java,c#等正统面向对象语言,你会难以理解js的面向对象,他和普通的面向对象不太一样,今天,我们通过封装一个toast插件,来看看js面向对象是如何运行的. ...
- 利用面向对象思想封装Konva动态进度条
1.html代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 谈一谈原生JS中的【面向对象思想】
[重点提前说:面向对象的思想很重要!] 最近开始接触学习后台的PHP语言,在接触到PHP中的面向对象相关思想之后,突然想到之前曾接触的JS中的面向对象思想,无奈记性太差, ...
- JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块
JAVA之旅(四)--面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块 加油吧,节奏得快点了 1.概述 上篇幅也是讲了这点,这篇幅就着重的讲一下思想和案例 就拿买 ...
- js 实现对ajax请求面向对象的封装
AJAX 是一种用于创建高速动态网页的技术.通过在后台与server进行少量数据交换.AJAX 能够使网页实现异步更新.这意味着能够在不又一次载入整个网页的情况下,对网页的某部分进行 ...
- JS 的实例和对象的区别
对于传统的OOP思想,JS的语法确实比较难搞,其中之一就是实例和对象的区别. 什么是实例? 实例是类的具体化产品. JS语法没有类这个概念(当然ES6引用了类这个概念).只能通过构造函数来创建类,例如 ...
- java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述
在之前的java 23 中,了解过设计模式的单例模式和工厂模式.在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设 ...
- 使用面向对象思想处理cookie
实例:使用面向对象思想处理cookie如果读者对cookie 不熟悉,可以在第七章学习它的使用方法,虽然在那里创建了几个通用函数用于cookie 的处理,但这些函数彼此分离,没有体现出是一个整体.联想 ...
随机推荐
- c++ 使用 vcpkg
1. 打开下载地址:https://github.com/Microsoft/vcpkg 2. 直接下载到本地某个盘 3. 配置环境变量: 4. 打开下载到本地的vcpkg有可能叫vcpkg-mast ...
- python笔记 面向对象编程从入门到高级
目录: 一.概念 二.方法 2.1组合 2.2继承 2.3多态 2.4封装 2.5归一化设计 三.面向对象高级 3.1 反射(自省) 3.2 内置方法__getatter__, __ ...
- centos7 安装docker(手动和脚本安装)换源 卸载
centos7 安装docker(手动和脚本安装)换源 卸载 Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker ...
- jquery库与其他库(比如prototype)冲突的解决方法
前端开发很容易会遇到jQuery库与其他库冲突的场景,比如和prototype库冲突. 实际上这种冲突是因为不同的第三方JS库争夺对$标识符的控制权引起的. 解决方法,就是使用jQuery提供的jQu ...
- scala基础题--100以内的数求和,求出当和第一次大于20的当前数【for】
import util.control.Breaks._ object work01 { def main(args: Array[String]): Unit = { //方式一 var sum:I ...
- mvc5 源码解析2-2 mvchandler的执行
我们从application获取的时候查看stepmanager的实现类 IHttpHandler applicationInstance = HttpApplicationFactory.GetAp ...
- disconf的简单使用与远程配置更改为使用本地配置
这几天因为阿里云迁移到腾讯云的原因,原来服务器上的disconf不再使用了.在这段时间里,系统出现的bug很难寻找原因(项目起不来),现在想要把disconf远程配置更改成直接使用本地配置.首先,了解 ...
- 线程安全---Day23
最近忙着备考大学四年最后的两科,昨天刚考完大学所有的考试,但是大学专业是机械,但是自己热衷于IT行业,想往IT行业走,希望毕业后能成功进入到IT行业,只希望毕业能找到一份Java开发工程师的工作,这样 ...
- 一般处理程序ashx输出XML
首先构建自己的xmldocument,方式很多例如: XmlDocument xmldoc = new XmlDocument(); XmlDeclaration xmldecl = xmldoc.C ...
- ES6 入门系列 (三) 尾递归
递归我们不陌生, 那什么是尾递归呢? 为什么要用尾递归呢? 尾递归怎么用呢? 带着这三个问题我们来了解它, 我们知道递归非常耗费内存,一不小心就会发生‘栈溢出’, 相信你一定遇到过这个错误: stac ...