JavaScript面向对象(极简主义法minimalist approach)


Posted in Javascript onJuly 17, 2012

极简主义法

荷兰程序员 Gabor de Mooij 提出了一种比 Object.create ()更好的新方法,他称这种方法为"极简主义法"(minimalist approach)。这也是我推荐的方法。

3. 1 封装

这种方法不使用 this 和 prototype,代码部署起来非常简单,这大概也是它被叫做"极简主义法"的原因。

首先,它也是用一个对象模拟"类"。在这个类里面,定义一个构造函数 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 (); // 喵喵喵

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

3. 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 实例,就会同时继承 Cat 类和 Animal 类。

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

3. 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

3. 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 (); // 啦啦啦
Javascript 相关文章推荐
js 格式化时间日期函数小结
Mar 20 Javascript
Web表单提交之disabled问题js解决方法
Jan 13 Javascript
jQuery插件MixItUp实现动画过滤和排序
Apr 12 Javascript
js实现Select列表各项上移和下移的方法
Aug 14 Javascript
Webwork 实现文件上传下载代码详解
Feb 02 Javascript
js 连续赋值的简单实现
Jun 13 Javascript
AngularJS入门教程之链接与图片模板详解
Aug 19 Javascript
JavaScript轻松创建级联函数的方法示例
Feb 10 Javascript
vue项目总结之文件夹结构配置详解
Dec 13 Javascript
微信小程序自定义音乐进度条的实例代码
Aug 28 Javascript
解决vue初始化项目时,一直卡在Project description上的问题
Oct 31 Javascript
vue项目支付功能代码详解
Feb 18 Vue.js
基于jQuery的获取标签名的代码
Jul 16 #Javascript
写自已的js类库需要的核心代码
Jul 16 #Javascript
js不完美解决click和dblclick事件冲突问题
Jul 16 #Javascript
js jquery数组介绍
Jul 15 #Javascript
js限制文本框只能输入数字(正则表达式)
Jul 15 #Javascript
基于jquery的图片幻灯展示源码
Jul 15 #Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
Jul 15 #Javascript
You might like
深入了解php4(1)--回到未来
2006/10/09 PHP
用PHP和ACCESS写聊天室(三)
2006/10/09 PHP
php smarty模版引擎中的缓存应用
2009/12/02 PHP
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
解决laravel session失效的问题
2019/10/14 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
jQuery表单获取和失去焦点输入框提示效果的实例代码
2013/08/01 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
邮箱下拉自动填充选择示例代码附图
2014/04/03 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
前端构建工具之gulp的语法教程
2017/06/12 Javascript
Mongoose中document与object的区别示例详解
2017/09/18 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
[45:16]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第一场 12.12
2020/12/16 DOTA
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
Python代码太长换行的实现
2019/07/05 Python
使用Python的datetime库处理时间(RPA流程)
2019/11/24 Python
浅析Python中字符串的intern机制
2020/10/03 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
e路東瀛(JAPANiCAN)香港:日本旅游、日本酒店和温泉旅馆预订
2018/11/21 全球购物
Windows和Linux动态库应用异同
2016/04/17 面试题
公路绿化方案
2014/05/12 职场文书
党政领导班子四风问题对照检查材料思想汇报
2014/10/02 职场文书
2015高考寄语集锦
2015/02/27 职场文书
任命书标准格式
2015/03/02 职场文书
小区保洁员岗位职责
2015/04/10 职场文书
惊涛骇浪观后感
2015/06/05 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
yolov5返回坐标的方法实例
2022/03/17 Python