1. 程式人生 > >原型鏈繼承

原型鏈繼承

() 能夠 ons 方法 type 調用 prototype 內部 而是

  面向對象編程都會涉及到繼承這個概念,JS中實現繼承的方式主要是通過原型鏈的方法。

一、構造函數、原型與實例之間的關系

  每創建一個函數,該函數就會自動帶有一個 prototype 屬性。該屬性是個指針,指向了一個對象,我們稱之為 原型對象。指針就好比學生的學號,原型對象則是那個學生。我們通過學號找到唯一的那個學生。假設突然,指針設置 null, 學號重置空了,不要慌,對象還存在,學生也沒消失。只是不好找了。

  原型對象上默認有一個屬性 constructor,該屬性也是一個指針,指向其相關聯的構造函數。

  通過調用構造函數產生的實例,都有一個內部屬性,指向了原型對象。所以實例能夠訪問原型對象上的所有屬性和方法。

  所以三者的關系是,每個構造函數都有一個原型對象,原型對象都包含一個指向構造函數的指針,而實例都包含一個指向原型對象的內部指針。

function Dog (name) {
    this.name = name;
    this.type = ‘Dog‘;  
}
Dog.prototype.speak = function () {
  alert(‘汪!‘);
}
var doggie = new Dog(‘jiwawa‘);
doggie.speak();  //汪!

  以上代碼定義了一個構造函數 Dog(), Dog.prototype 指向的原型對象上的自帶屬性construtor指向了 Dog,即 Dog.prototype.constructor = Dog. 然後在這個原型對象上定義了一個方法speak。實例doggie由於其內部指針指向了原型對象,所以可以訪問到 speak方法。

  技術分享

  

  Dog.prototype 只是一個指針,指向的是原型對象,但是這個原型對象並不特別,它也只是一個普通對象。假設說,我們這時候,讓 Dog.protptype 不再指向最初的原型對象,而是另一個類 (Animal)的實例,情況會怎樣呢?

(正文明天寫。)

  

  

原型鏈繼承