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 相关文章推荐
javascript Discuz代码中的msn聊天小功能
May 25 Javascript
兼容ie和firefox js关闭代码
Dec 11 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
May 07 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
May 22 Javascript
深入理解Ajax的get和post请求
Jun 02 Javascript
js style.display=block显示布局错乱问题的解决方法
Sep 21 Javascript
浅析bootstrap原理及优缺点
Mar 19 Javascript
ReactNative实现Toast的示例
Dec 31 Javascript
jQuery实现图片下载代码
Jul 18 jQuery
微信小程序实现传递多个参数与事件处理
Aug 12 Javascript
在Echarts图中给坐标轴加一个标识线markLine
Jul 20 Javascript
es5 类与es6中class的区别小结
Nov 09 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
如何过滤高亮显示非法字符
2006/10/09 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
php发送html格式文本邮件的方法
2015/06/10 PHP
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
JavaScript性能优化总结之加载与执行
2016/08/11 Javascript
jQuery 选择器(61种)整理总结
2016/09/26 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
ES6深入理解之“let”能替代”var“吗?
2017/06/28 Javascript
JavaScript中字符串的常用操作方法及特殊字符
2018/03/18 Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
2018/07/17 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
微信小程序拼接图片链接无底洞深入探究
2019/09/03 Javascript
python使用socket向客户端发送数据的方法
2015/04/29 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
matplotlib 对坐标的控制,加图例注释的操作
2020/04/17 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
python 生成器需注意的小问题
2020/09/29 Python
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
电信营业员自我评价分享
2014/01/17 职场文书
销售业务员岗位职责
2014/01/29 职场文书
反腐倡廉标语
2014/06/24 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
2014个人年度工作总结
2014/12/15 职场文书
学校社团活动总结
2015/05/07 职场文书
回复函范文
2015/07/14 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
关于感恩的歌曲整理(8首)
2019/08/14 职场文书