漢語解釋:泛指把前人的做風、文化、知識等接受過來
計算機術語解釋:繼承可使得子類具備父類的屬性和方法或者從新定義、追加屬性和方法等函數
function Animal(name) { this.name = name || 'animal'; this.speak = function () { console.log('speak'); } } Animal.prototype.move = function () { console.log('move'); }
function Cat() { this.getName = function () { console.log(this.name); }; } Cat.prototype = new Animal('cat1'); var cat = new Cat(); cat.name = 'cat2'; console.log(cat);//該實例對象有一個name爲cat2,原型上有一個name是cat1 cat.getName();//cat2(先找當前屬性,再找原型) console.log(cat instanceof Cat);//true console.log(cat instanceof Animal);//true
父子之間存在關係,但子類並不會建立新的屬性,set子類屬性並不會覆蓋原型上的屬性,get屬性只不過是根據先讀取當前屬性再讀取原型的優先級
function Dog(name) { Animal.call(this); this.name = name || 'doggy'; } var dog = new Dog(); console.log(dog);//只有子類屬性 console.log(dog instanceof Dog); // true console.log(dog instanceof Animal); // false
實際上只是利用父類構造函數來添加子類屬性,父子之間沒有什麼關係
class Animal2 { constructor(name) { this.name = name || 'animal2'; this.speak = function () { console.log('speak'); } } } Animal2.prototype.move = function () { console.log('move'); } var animal2 = new Animal2('god2'); console.log(animal2); class Bird extends Animal2 { getName() { console.log(this.name); } } var bird = new Bird('bird'); console.log(bird);//既有父類的屬性,原型鏈也指向父類 bird.getName(); console.log(bird instanceof Bird); // true console.log(bird instanceof Animal2); // true