Javascript:用 "腦圖軟件" 學習 “面向對象”


面向對象

面向對象思維導圖

默認情況下,Javascript支持如下特性(紅色代表默認支持):

通過框架層面的支持,Javascript可以支持所有這些特性。

重點概念介紹

鴨子類型

如果一個東西(對象)看起來像鴨子(符合接口定義),走起路來也像鴨子(行為也符合期望),那么這個東西就是鴨子。

如所有動態語言一樣,Javascript天生就支持“鴨子類型”。從“多態”的維度考慮,Javascript是通過“鴨子類型”支持的“多態”。

代碼示例

 1 var Rectangle = function (name) {
 2     this.name = name;
 3 };
 4 
 5 Rectangle.prototype.draw = function () {
 6     console.log(this.name);
 7 };
 8 
 9 var Circle = function (name) {
10     this.name = name;
11 };
12 
13 Circle.prototype.draw = function () {
14     console.log(this.name);
15 };
16 
17 var rectangle = new Rectangle('Rectangle');
18 var circle = new Circle('Circle');
19 var custom = {
20     name: 'Custom',
21     draw: function () {
22         console.log(this.name);
23     }
24 };
25 
26 var shapes = [rectangle, circle, custom];
27 
28 shapes[0].draw();
29 shapes[1].draw();
30 shapes[2].draw();

上例中三個對象不在一個繼承體系(先不考慮object),但是他們實現了多態。

鴨子類型的核心是”不關注其類型,只關注其職責“。

泛型

不同語言支持的泛型機制是不一樣的,這里不做深入了,我也很難給出一個定義。

Javascript天生就支持“泛型”。Javascript是通過“鴨子類型”支持的“泛型”的。

代碼示例

 1 var Man = function () {
 2 
 3 };
 4 Man.prototype.say = function () {
 5     return 'Man';
 6 }
 7 
 8 var Dog = function () {
 9 
10 };
11 Dog.prototype.say = function () {
12     return 'Dog';
13 }
14 
15 var say = function (generic) {
16     console.log(generic.say());
17 }
18 
19 say(new Man());
20 say(new Dog());

 元編程

一種寫程序的程序。

如所有動態語言一樣,Javascript天生就支持“元編程”。

代碼示例

 1 Function.prototype.accessor = function (name) {
 2     this.prototype['get' + name] = function () {
 3         return this.name;
 4     };
 5 
 6     this.prototype['set' + name] = function (name) {
 7         this.name = name;
 8     }
 9 };
10 
11 var User = function () {
12 
13 };
14 User.accessor('Name');
15 
16 var user = new User();
17 user.setName('段光偉');
18 console.log(user.getName());

原型繼承

Javascript:必須知道的Javascript知識點之“原型鏈”

Javascript:必須知道的Javascript知識點之“this指針”

隱式封裝

語言的作者一般會對人性有一個假設,一個常見的假設就是:

    1. 開發人員是愚蠢的,他們很容易犯錯誤,因此語言要防止他們犯錯誤。
    2. 開發人員是聰明的,他們會對自己的錯誤負責,因此語言要給予他們最大的靈活性。

Javascript選擇了第二種方式,因此它不在語言層面設置顯式的約束(private、protect),多數情況要根據團隊的約定。

備注

今天先理清了一些基本概念,關於單繼承、多繼承和摻入的介紹要等下一篇文章了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM