JavaScript繼承詳解(一)

面向對象與基於對象

幾乎每一個開發人員都有面向對象語言(好比C++、C#、Java)的開發經驗。 在傳統面向對象的語言中,有兩個很是重要的概念 - 類和實例。 類定義了一類事物公共的行爲和方法;而實例則是類的一個具體實現。 咱們還知道,面向對象編程有三個重要的概念 - 封裝、繼承和多態。編程

可是在JavaScript的世界中,全部的這一切特性彷佛都不存在。 由於JavaScript自己不是面向對象的語言,而是基於對象的語言。 這裏面就有一些有趣的特性,好比JavaScript中全部事物都是對象, 包括字符串、數組、日期、數字,甚至是函數,好比下面這個例子:數組

01 // 定義一個函數 - add
02 function add(a, b) {
03     add.invokeTimes++;
04     return a + b;
05 }
06 // 由於函數自己也是對象,這裏爲函數add定義一個屬性,用來記錄此函數被調用的次數
07 add.invokeTimes = 0;
08 add(1 + 1);
09 add(2 + 3);
10 console.log(add.invokeTimes); // 2

 

模擬JavaScript中類和繼承

在面向對象的語言中,咱們使用類來建立一個自定義對象。然而JavaScript中全部事物都是對象,那麼用什麼辦法來建立自定義對象呢?函數

這就須要引入另一個概念 - 原型(prototype),咱們能夠簡單的把prototype看作是一個模版,新建立的自定義對象都是這個模版(prototype)的一個拷貝 (實際上不是拷貝而是連接,只不過這種連接是不可見,給人們的感受好像是拷貝)。spa

讓咱們看一下經過prototype建立自定義對象的一個例子:prototype

01 // 構造函數
02    function Person(name, sex) {
03
相關文章
相關標籤/搜索