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实现权限树的更新权限时的全选全消功能
Feb 17 Javascript
jQuery学习5 jQuery事件模型
Feb 07 Javascript
JavaScript中使用replace结合正则实现replaceAll的效果
Jun 04 Javascript
Javascript倒计时页面跳转实例小结
Sep 11 Javascript
javascript与jquery中跳出循环的区别总结
Nov 04 Javascript
javascript自动生成包含数字与字符的随机字符串
Feb 09 Javascript
jQuery实现简单滚动动画效果
Apr 07 Javascript
微信小程序 slider 详解及实例代码
Jan 10 Javascript
jquery实现拖动效果(代码分享)
Jan 25 Javascript
js/jq仿window文件夹框选操作插件
Mar 08 Javascript
element-ui组件table实现自定义筛选功能的示例代码
Mar 15 Javascript
javascript操作向表格中动态加载数据
Aug 27 Javascript
基于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
PHP的FTP学习(一)[转自奥索]
2006/10/09 PHP
php中计算时间差的几种方法
2009/12/31 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
xss文件页面内容读取(解决)
2010/11/28 Javascript
JS构建页面的DOM节点结构的实现代码
2011/12/09 Javascript
为原生js Array增加each方法
2012/04/07 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
jquery聚焦文本框与扩展文本框聚焦方法
2012/10/12 Javascript
JavaScript中json使用自己总结
2013/08/13 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
2017/02/13 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
python SQLAlchemy 中的Engine详解
2019/07/04 Python
解决Python3 控制台输出InsecureRequestWarning问题
2019/07/15 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
如何使用 Flask 做一个评论系统
2020/11/27 Python
用css3制作纸张效果(外翻卷角)
2013/02/01 HTML / CSS
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
应届大学生的推荐信
2013/11/20 职场文书
护理专业学生职业生涯规划范文
2014/03/11 职场文书
会计学习心得体会
2014/09/09 职场文书
标准版离职证明书
2014/09/12 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
鸡毛信观后感
2015/06/11 职场文书
2016年社区综治宣传月活动总结
2016/03/16 职场文书