原創聲明:本文為作者原創,未經允許不得轉載,經授權轉載需注明作者和出處
這兩天生病了,所以趕的喲點慢,還是老樣子,下方歡迎打賞點贊扔香蕉~
繼承是什么,如同人,在出生的時候就繼承了上一輩的基因一樣,js里也存在著繼承,如
function father(){
this.name="丁小柒";
this.sex="man"
}
var son=new father();
console.log(son.name); //丁小柒
console.log(son.sex); //man
從上面的例子里我們會發現,通過new實例出來的son也可以調用father的東西,這種關系就叫做繼承,但是不可能兒子與父親的名字一樣,所以
function father(){
this.name="丁小柒";
this.sex="man"
}
var son=new father();
son.name="此處不告訴你"; //設置son的名字
console.log(son.name) //此處不告訴你
但是我們在開發時一般不會這么寫,因為每個father的信息都不會一樣,所以就有了動態的原型
function father(name,sex){ //創建一個原型,包含兩個屬性name,sex
this.name=name;
this.sex=sex;
}
var son=new father("姓名","SEX"); //實例對象并寫入屬性
console.log(son.name) //姓名
prototype的用法
總有一些東西會是你的,也總有一些你永遠拿不到,想讓你繼承就繼承,不想讓就不會繼承
function father(name,sex){
this.name=name;
this.sex=sex; //設置動態的屬性
}
father.prototype.home="AH"; //設置可繼承的屬性
var son=new father("姓名","SEX");
console.log(son.home) //AH
原型覆蓋
function father(){
}
father.prototype.home="AH"; //設置繼承屬性
function son(){ //空的son對象
}
son.prototype=new father(); //son的繼承屬性被father的覆蓋
var gg=new son();
console.log(gg.home)
可能很多人會覺得這不是寫入嗎,怎么覆蓋了,那么看下面
function father(){
}
father.prototype.home="AH";
function son(){
}
son.prototype.food="chicken"; //設置可繼承屬性
son.prototype=new father(); //原型覆蓋
var gg=new son();
console.log(gg.food) //"undefined"
看下面
function father(){
}
father.prototype.home="AH";
function son(){
}
son.prototype=new father(); //原型覆蓋
son.prototype.food="chicken"; //再寫入
var gg=new son();
console.log(gg.home) //AH
console.log(gg.food) //chicken
是不是看的明白多了,那么何為所謂的原型鏈呢
如果說prototype是繼承下去,那么proto呢,雖然一般對象沒有這個方法
這里寫圖片描述
所以說 原型.prototype=實例._proto_
這么一個如鏈子般的東西也就是所謂的原型鏈了,使用原型,我們可以實現好多功能