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的with 语句的使用方法
May 09 Javascript
jQuery中cookie插件用法实例分析
Dec 04 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
Apr 01 Javascript
JS获取鼠标相对位置的方法
Sep 20 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
Mar 09 Javascript
Node.Js中实现端口重用原理详解
May 03 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
Aug 20 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
Jan 23 Javascript
Vue项目中Api的组织和返回数据处理的操作
Nov 04 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
Nov 15 Javascript
Javascript Worker子线程代码实例
Feb 20 Javascript
JavaScript实现前端网页版倒计时
Mar 24 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实现图片添加水印功能
2014/02/13 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
2014/09/22 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
2017/09/19 jQuery
Less 安装及基本用法
2018/05/05 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
我所理解的JavaScript中的this指向
2020/09/04 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
Python解析最简单的验证码
2016/01/07 Python
Python文件操作,open读写文件,追加文本内容实例
2016/12/14 Python
python检查URL是否正常访问的小技巧
2017/02/25 Python
django js实现部分页面刷新的示例代码
2018/05/28 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
python安装twisted的问题解析
2018/08/21 Python
Python多继承原理与用法示例
2018/08/23 Python
python 自定义对象的打印方法
2019/01/12 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
Python 将 QQ 好友头像生成祝福语的实现代码
2020/05/03 Python
Selenium自动化测试工具使用方法汇总
2020/06/12 Python
Python自动化操作实现图例绘制
2020/07/09 Python
Python如何批量生成和调用变量
2020/11/21 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
银行柜员应聘推荐信范文
2013/11/24 职场文书
节水标语大全
2014/06/11 职场文书
2014年度安全生产目标管理责任书
2014/07/25 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
企业党支部工作总结2015
2015/05/21 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
药房管理制度范本
2015/08/06 职场文书
微信小程序实现录音Record功能
2021/05/09 Javascript