原型鏈繼承
阿新 • • 發佈:2017-05-18
() 能夠 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)的實例,情況會怎樣呢?
(正文明天寫。)
原型鏈繼承