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 相关文章推荐
jquery ui dialog里调用datepicker的问题
Aug 06 Javascript
jQuery 事件队列调整方法
Sep 18 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
Jul 14 Javascript
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
Nov 11 Javascript
node.js中的events.emitter.removeListener方法使用说明
Dec 10 Javascript
JSONP之我见
Mar 24 Javascript
js图片轮播效果实现代码
Apr 18 Javascript
jQuery鼠标悬停内容动画切换效果
Apr 27 jQuery
JS实现汉字与Unicode码相互转换的方法详解
Apr 28 Javascript
7个好用的JavaScript技巧分享(译)
May 07 Javascript
JavaScript中的执行环境和作用域链
Sep 04 Javascript
详解JavaScript 的执行机制
Sep 18 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本地服务器分享
2013/02/19 PHP
php利用cookie实现自动登录的方法
2014/12/10 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
Django中的cookie与session操作实例代码
2017/08/17 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
picChange 图片切换特效的函数代码
2010/05/06 Javascript
jquery 元素相对定位代码
2010/10/15 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
javascript中Math.random()使用详解
2015/04/15 Javascript
TypeScript 中接口详解
2015/06/19 Javascript
利用vue.js把静态json绑定bootstrap的table方法
2018/08/28 Javascript
JavaScript禁用右键单击优缺点分析
2019/01/20 Javascript
谈谈JavaScript中的函数
2020/09/08 Javascript
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
2018/07/18 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
jupyter 导入csv文件方式
2020/04/21 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
python 实用工具状态机transitions
2020/11/21 Python
总结html5自定义属性有哪些
2020/04/01 HTML / CSS
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
PyQt QMainWindow的使用示例
2021/03/24 Python
电大会计学自我鉴定
2014/02/06 职场文书
保密工作实施方案
2014/02/24 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
寒山寺导游词
2015/02/03 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
公司与个人合作协议书
2016/03/19 职场文书