【JavaScript】【對象】更好地理解對象繼承

繼承原理:實例中包含一個指向原型對象的內部指針segmentfault

實現方法:讓原型對象等於另外一個類型的實例函數

關鍵點:this

  1. 構造函數、原型對象、實例prototype

  2. 實例屬性、原型方法指針

  3. 構造關係、原型關係code

  4. 自有屬性、繼承屬性和方法對象

demo:繼承

//構造器
function Animal() {
    this.animal = 'animal';
};
function Mammal() {
    this.mammal = 'mammal';
};
var cat;

//原型鏈
Mammal.prototype = new Animal();
cat = new Mammal();

//添加屬性和方法
Animal.prototype.isAnimal = true;
Animal.prototype.sayAnimal = function() {
    alert('Is it ' + this.animal + '? ' + this.isAnimal);
};
Mammal.prototype.isMammal = true;
Mammal.prototype.sayMammal = function() {
    alert('Is it a ' + this.mammal + '? ' + this.isMammal);
};

先來看看每一個對象都能訪問到哪些屬性和方法:原型鏈

Animal.prototype:作用域

isAnimal    //自定義
sayAnimal()    //自定義

Mammal.prototype:

isMammal    //自定義
sayMammal()    //自定義
animal    //來自構造函數
isAnimal    //來自繼承
sayAnimal()    //來自繼承

cat:

mammal    //來自構造函數
isMammal    //來自繼承
sayMammal()    //來自繼承
animal    //來自繼承
isAnimal    //來自繼承
sayAnimal()    //來自繼承

在這個demo中,有兩對構造關係和兩對繼承關係(不考慮Object)。每個經過構造函數實例化的對象(Mammal.prototypecat)都具備構造函數中的屬性,實例和構造函數之間是構造關係;構造過程當中也造成了原型關係Mammal.prototypecat的原型,Animal.prototypeMammal.prototype的原型,實例經過原型鏈找到原型中的屬性和方法。

自定義和構造函數的屬性是自有屬性,它們是對象自己的屬性。來自繼承的屬性和方法是對象沿着原型鏈找到的,它們並非對象自己的屬性和方法

實例繼承到的方法的做用域是該實例對象內部的執行環境,能夠訪問實例能獲取到的全部屬性。經過this.property的方式能夠獲得實例對象可以訪問到的全部屬性和方法,包括自有屬性和繼承的屬性方法。demo中的實例對象cat能夠訪問到在AnimalMammal及其原型中定義的全部屬性方法,這正是繼承的意義所在。

驗證:

console.log(cat.mammal);    //mammal
console.log(cat.isMammal);    //true
console.log(cat.sayMammal());    //Is it mammal? true
console.log(cat.animal);    //animal
console.log(cat.isAnimal);    //true
console.log(cat.sayAnimal());    //Is it animal? true

轉載請註明出處:http://www.javashuo.com/article/p-qaktmvpx-ge.html

文章不按期更新完善,若是能對你有一點點啓發,我將不勝榮幸。

相關文章
相關標籤/搜索