您的位置:首页 > Web前端 > JavaScript

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),多数情况要根据团队的约定。

备注

今天先理清了一些基本概念,关于单继承、多继承和掺入的介绍要等下一篇文章了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: