Javascript:用 "脑图软件" 学习 “面向对象”
2013-04-30 11:01
190 查看
面向对象
面向对象思维导图默认情况下,Javascript支持如下特性(红色代表默认支持):
通过框架层面的支持,Javascript可以支持所有这些特性。
重点概念介绍
鸭子类型
如果一个东西(对象)看起来像鸭子(符合接口定义),走起路来也像鸭子(行为也符合期望),那么这个东西就是鸭子。
如所有动态语言一样,Javascript天生就支持“鸭子类型”。从“多态”的维度考虑,Javascript是通过“鸭子类型”支持的“多态”。代码示例
var Rectangle = function (name) { this.name = name; }; Rectangle.prototype.draw = function () { console.log(this.name); }; var Circle = function (name) { this.name = name; }; Circle.prototype.draw = function () { console.log(this.name); }; var rectangle = new Rectangle('Rectangle'); var circle = new Circle('Circle'); var custom = { name: 'Custom', draw: function () { console.log(this.name); } }; var shapes = [rectangle, circle, custom]; shapes[0].draw(); shapes[1].draw(); shapes[2].draw();
上例中三个对象不在一个继承体系(先不考虑object),但是他们实现了多态。
鸭子类型的核心是”不关注其类型,只关注其职责“。
泛型
不同语言支持的泛型机制是不一样的,这里不做深入了,我也很难给出一个定义。
Javascript天生就支持“泛型”。Javascript是通过“鸭子类型”支持的“泛型”的。代码示例
var Man = function () { }; Man.prototype.say = function () { return 'Man'; } var Dog = function () { }; Dog.prototype.say = function () { return 'Dog'; } var say = function (generic) { console.log(generic.say()); } say(new Man()); say(new Dog());
元编程
一种写程序的程序。
如所有动态语言一样,Javascript天生就支持“元编程”。代码示例
Function.prototype.accessor = function (name) { this.prototype['get' + name] = function () { return this.name; }; this.prototype['set' + name] = function (name) { this.name = name; } }; var User = function () { }; User.accessor('Name'); var user = new User(); user.setName('段光伟'); console.log(user.getName());
原型继承
Javascript:必须知道的Javascript知识点之“原型链”Javascript:必须知道的Javascript知识点之“this指针”
隐式封装
语言的作者一般会对人性有一个假设,一个常见的假设就是:开发人员是愚蠢的,他们很容易犯错误,因此语言要防止他们犯错误。
开发人员是聪明的,他们会对自己的错误负责,因此语言要给予他们最大的灵活性。
Javascript选择了第二种方式,因此它不在语言层面设置显式的约束(private、protect),多数情况要根据团队的约定。
备注
今天先理清了一些基本概念,关于单继承、多继承和掺入的介绍要等下一篇文章了。相关文章推荐
- Esp8266学习之旅③ 利用 " 软件定时器 "或“硬件定时器” 定时0.5秒闪烁点亮一盏LED。(附带demo)
- "脑图"轻松学习Access视频教程
- JavaScript学习笔记-面向对象的模块化编程
- git学习笔记(1) -- "user.name has multiple values"
- "翻身做主"--给自己的软件制作注册码
- 面向对象的"形"与"本"
- javascript "非法值"检验.
- 学习javascript面向对象 实例讲解面向对象选项卡
- "微信裂变"软件出现:扫码后自动给好友群发广告
- Android学习20--OpenGL的"mapPoints"
- JavaScript学习 五、面向对象
- 如何理解并学习javascript中的面向对象(OOP)
- 程序员如何在"小公司成长"和"大公司学习"
- JavaScript面向对象学习小结
- "晴天"天气app的开源库逐步学习(三)
- javascript面向对象学习笔记——创建对象(转)
- "黑马程序员"面向对象的初步了解
- 如何高效能地学习和使用"工具"?
- 面向对象的javascript的学习
- "javascript:void(0)"用法