title: 技術(shù)分享篇
Welcome
原型鏈
原型對(duì)象
在Javascript中,萬(wàn)物皆對(duì)象,但對(duì)象也有區(qū)別,大致可以分為兩類,即:普通對(duì)象 Object 和 函數(shù)對(duì)象 Function。
一般通過(guò) new Function 產(chǎn)生的對(duì)象是函數(shù)對(duì)象,其他對(duì)象都是普通對(duì)象。
所有的對(duì)象都有(proto)屬性 只有函數(shù)對(duì)象有(prototype)屬性
函數(shù)對(duì)象
function fn(){};
var fn1=function(){};
console.log(typeof fn); //function
console.log(typeof fn1); //function
console.log(typeof Object); //function
console.log(typeof Array); //function
console.log(typeof Date); //function
......
原型對(duì)象其實(shí)就是構(gòu)造函數(shù)的一個(gè)實(shí)例對(duì)象,例如人對(duì)象,相當(dāng)于在person創(chuàng)建的時(shí)候,自動(dòng)創(chuàng)建了一個(gè)它的實(shí)例,并且把這個(gè)實(shí)例賦值給了prototype。
function Person(){};
let temp = new Person();
Person.prototype = temp;
原型鏈
原型鏈?zhǔn)菍?shí)現(xiàn)繼承的主要方法
原型鏈的思路:利用原型讓一個(gè)引用類型繼承另一個(gè)引用類型的屬性和方法。
JS通過(guò)原型鏈實(shí)現(xiàn)繼承列子:
//定義一個(gè) Animal 構(gòu)造函數(shù)
function Animal(){
this.type = 'Animal';
}
//給 Animal 定義方法
Animal.prototype.speack = function(){
console.log(this.type);
}
// 定義一個(gè) Dog 對(duì)象
function Dog(name){
this.name = name;
this.type = '汪汪汪';
}
//改變 Dog 的 prototype 指針,指向一個(gè) Animal 實(shí)例
Dog.prototype = new Animal();
Dog.prototype.speak = function () {
console.log(this.name+this.type+"叫");
}
var dog = new Dog('小黃');
dog.speak(); //Animal
//輸出 小黃汪汪汪叫。
這就說(shuō)明,我們可以通過(guò)原型鏈的方式,實(shí)現(xiàn) Dog 繼承 Animal 的所有屬性和方法。
總結(jié)來(lái)說(shuō): Dog.prototype 指向的原型對(duì)象后,實(shí)例的內(nèi)部指針也發(fā)生了改變,指向了新的原型對(duì)象,然后就能實(shí)現(xiàn)類與類之間的繼承了。(但是如果在重寫(xiě)原型對(duì)象之前,產(chǎn)生的實(shí)例,其內(nèi)部指針指向的還是最初的原型對(duì)象。)