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 加载并解析XML字符串的代码
Dec 13 Javascript
picChange 图片切换特效的函数代码
May 06 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
Mar 28 Javascript
js实现仿百度瀑布流的方法
Feb 05 Javascript
谈谈Jquery中的children find 的区别有哪些
Oct 19 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
Jan 10 Javascript
JS实现向iframe中表单传值的方法
Mar 24 Javascript
jQuery.form.js的使用详解
Jun 14 jQuery
微信小程序实现pdf、word等格式文件上传的方法
Sep 10 Javascript
你不可不知的Vue.js列表渲染详解
Oct 01 Javascript
通过angular CDK实现页面元素拖放的步骤详解
Jul 01 Javascript
浅谈react useEffect闭包的坑
Jun 08 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编码规范之注释和文件结构说明
2010/07/09 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
2014/04/08 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
Jquery下:nth-child(an+b)的使用注意
2011/05/28 Javascript
jQuery 图片切换插件(代码比较少)
2012/05/07 Javascript
Javascript中匿名函数的多种调用方式总结
2013/12/06 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
socket.io实现在线群聊功能
2017/04/07 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
对vue.js中this.$emit的深入理解
2018/02/23 Javascript
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
Python 字符串换行的多种方式
2018/09/06 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
Django执行源生mysql语句实现过程解析
2020/11/12 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
矫正人员思想汇报
2014/01/08 职场文书
工商治理实习生的自我评价
2014/01/15 职场文书
商场消防演习方案
2014/02/12 职场文书
大学生简短的自我评价分享
2014/02/20 职场文书
领导调研接待方案
2014/02/27 职场文书
文明礼仪伴我行演讲稿
2014/05/12 职场文书
宣传口号大全
2014/06/16 职场文书
学习十八大的心得体会
2014/09/12 职场文书
2015年信息宣传工作总结
2015/05/26 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
「SHOW BY ROCK!!」“雫シークレットマインド”组合单曲MV公开
2022/03/21 日漫
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技