极简主义法编写JavaScript类


Posted in Javascript onNovember 02, 2017

这个所谓的"极简主义法"是荷兰程序员Gabor de Mooij提出来的,这种方法不使用this和prototype,代码部署起来非常简单,这大概也是它被叫做"极简主义法"的原因。下面就介绍如何使用极简主义法完成JavaScript的封装和继承

1. 封装

首先,它也是用一个对象模拟"类"。在这个类里面,定义一个构造函数createNew(),用来生成实例。

var Cat = {
 
createNew: function(){
 


// some code here
 

}
 };

然后,在createNew()里面,定义一个实例对象,把这个实例对象作为返回值。

var Cat = {
 
createNew: function(){
 


var cat = {};
 


cat.name = "大毛";
 


cat.makeSound = function(){ alert("喵喵喵"); };
 


return cat;
 

}
 };

使用的时候,调用createNew()方法,就可以得到实例对象。

var cat1 = Cat.createNew();
 cat1.makeSound(); // 喵喵喵

这种方法的好处是,容易理解,结构清晰优雅,符合传统的"面向对象编程"的构造,因此可以方便地部署下面的特性。

2. 继承

让一个类继承另一个类,实现起来很方便。只要在前者的createNew()方法中,调用后者的createNew()方法即可。

先定义一个Animal类:

var Animal = {
 
createNew: function(){
 


var animal = {};
 


animal.sleep = function(){ alert("睡懒觉"); };
 


return animal;
 

}
 };

然后,在Cat的createNew()方法中,调用Animal的createNew()方法

var Cat = {
 
createNew: function(){
 


var cat = Animal.createNew();
 


cat.name = "大毛";
 


cat.makeSound = function(){ alert("喵喵喵"); };
 


return cat;
 

}
 };

这样得到的Cat实例,就会继承Animal类。

var cat1 = Cat.createNew();
 cat1.sleep(); // 睡懒觉

3. 私有属性和私有方法

在createNew()方法中,只要不是定义在cat对象上的方法和属性,都是私有的。

var Cat = {
 
createNew: function(){
 


var cat = {};
 


var sound = "喵喵喵";//私有属性
 


cat.makeSound = function(){ 
      alert(sound); 
     };
 


return cat;
 

}
 };

上例的内部变量sound,外部无法读取,只有通过cat的公有方法makeSound()来读取。

var cat1 = Cat.createNew();
 alert(cat1.sound); // undefined

4. 数据共享

有时候,我们需要所有实例对象,能够读写同一项内部数据。这个时候,只要把这个内部数据,封装在类对象的里面、createNew()方法的外面即可。

var Cat = {
 
sound : "喵喵喵",
 

createNew: function(){
 


var cat = {};
 


cat.makeSound = function(){ alert(Cat.sound); };
 


cat.changeSound = function(x){ Cat.sound = x; };
 


return cat;
 

}
 };

然后,生成两个实例对象:

var cat1 = Cat.createNew();
 var cat2 = Cat.createNew();
 cat1.makeSound(); // 喵喵喵

这时,如果有一个实例对象,修改了共享的数据,另一个实例对象也会受到影响。

cat2.changeSound("啦啦啦");
 cat1.makeSound(); // 啦啦啦

 

极简主义,看起来很美好,但是也有缺点,首先是不能使用instanceof 判断对象所属的类,"cat1 instanceof Cat"无法通过,另外,极简主义虽然摆脱了使用原型链的缺点(属性不能私有、创建、继承对象不够直观),但也暴露了没用原型链的弊端:每一次生成一个实例,都必须为重复的内容,多占用一些内存。

总结

以上所述是小编给大家介绍的极简主义法编写JavaScript类,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JQuery实现自定义对话框的代码
Jun 15 Javascript
js以对象为索引的关联数组
Jul 04 Javascript
JavaScript加强之自定义event事件
Sep 21 Javascript
js判断手机和pc端选择不同执行事件的方法
Jan 30 Javascript
jQuery使用each方法与for语句遍历数组示例
Jun 16 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
Mar 06 Javascript
基于JavaScript实现的快速排序算法分析
Apr 14 Javascript
vue时间格式化实例代码
Jun 13 Javascript
bmob js-sdk 在vue中的使用教程
Jan 21 Javascript
详解微信小程序开发用户授权登陆
Apr 24 Javascript
用js限制网页只在微信浏览器中打开(或者只能手机端访问)
Dec 24 Javascript
小程序实现多个选项卡切换
Jun 19 Javascript
利用nvm管理多个版本的node.js与npm详解
Nov 02 #Javascript
JavaScript屏蔽Backspace键的实现代码
Nov 02 #Javascript
Vue源码学习之初始化模块init.js解析
Nov 02 #Javascript
为输入框加入数字js校验代码分享
Nov 02 #Javascript
详谈js中标准for循环与foreach(for in)的区别
Nov 02 #Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
Nov 02 #Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
Nov 02 #Javascript
You might like
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
2014最热门的24个php类库汇总
2014/12/18 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
2015/01/04 PHP
thinkphp框架下404页面设置 仅三步
2016/05/14 PHP
jQuery使用技巧简单汇总
2013/04/18 Javascript
JQuery替换DOM节点的方法
2015/06/11 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
详解AngularJS脏检查机制及$timeout的妙用
2017/06/19 Javascript
JavaScript实现三级级联特效
2017/11/05 Javascript
基于Vue框架vux组件库实现上拉刷新功能
2017/11/28 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
NodeJS实现自定义流的方法
2018/08/01 NodeJs
Nuxt配置Element-UI按需引入的操作方法
2020/07/06 Javascript
Vue点击切换Class变化,实现Active当前样式操作
2020/07/17 Javascript
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
python共享引用(多个变量引用)示例代码
2013/12/04 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
python实现淘宝秒杀脚本
2020/06/23 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
python3实现网页版raspberry pi(树莓派)小车控制
2020/02/12 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
python 实现汉诺塔游戏
2020/11/28 Python
python 发送邮件的四种方法汇总
2020/12/02 Python
英国时尚家具、家居饰品及礼品商店:Graham & Green
2016/09/15 全球购物
opencv实现图像几何变换
2021/03/24 Python
红领巾心向党广播稿
2014/01/19 职场文书
给全校老师的建议书
2014/03/13 职场文书
酒店员工培训方案
2014/06/02 职场文书
销售辞职信范文
2015/03/02 职场文书
2016春节慰问信范文
2015/03/25 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers
配置nginx负载均衡
2022/05/06 Servers