javascript中繼承模式

2021-08-16 23:50:42 字數 1307 閱讀 1199

一.每個方法function都有原型prototype屬性,這個屬性是構造方法構造出來的物件的公有祖先

當使用建構函式new出物件時,隱式地在構造方法開頭新增var this = ,在函式末尾加上return this.

***子類只可以訪問父類的屬性但不能修改,如果修改那麼會在自己的屬性上加

二.繼承的發展史

1.傳統形式-->原型鏈

father.prototype.lastname = 'cao';

function father()

var father = new father();

son.prototype = father;

function son()

var son = new son();

此時物件son繼承了father

2.借用建構函式

function person(name, age, ***) 

function student(name, age, ***, id)

此時個方法的缺點:1.此時person和student邏輯上沒有繼承關係,只是student呼叫了person的方法,student構建出來的物件的__proto__屬性不是person  2.每次構造都要執行兩次函式

3.共享原型

father.prototype.lastname = {};

function father()

function son()

son.prototype = father.prototype;

此時son和father共用乙個原型。方法的缺點:如果給其中乙個原型增加乙個屬性(son.prototype.*** = 'male')那麼father的原型上也會加乙個***屬性;

4.聖杯模式

function f () 

f.prototype = father.prototype;

son.prototype = new f();

son.prototype.constuctor = son;//將他的構造器歸位,不然son.constructor = father

son.prototype.uber = father.prototype;//指出son的超類(他真正繼承自誰)

這樣的好處:用乙個f做中間層,son的原型是新的f物件,這個物件上沒有屬性,當在son的原型上增加屬性時father的原型不變,但是son也可以通過自己原型(f構造的物件)的原型來訪問father原型的屬性。

JavaScript繼承模式

作用 改變this指向 區別 傳參列表不同 我們通過乙個實際案例來看 function father name,age,hobby function son name,age,hobby,grade var son new son xiaozhuan 13,football 2000 這樣繼承父親中...

老生常談javascript的5中繼承

js裡常用的如下兩種繼承方式 原型鏈繼承 物件間的繼承 類式繼承 建構函式間的繼承 在物件導向的語言中,我們使用類來建立乙個自定義物件。然而js中所有事物都是物件,那麼用什麼辦法來建立自定義物件呢?這就需要用到js的原型 我們可以簡單的把prototype看做是乙個模版,新建立的自定義物件都是這個模...

JavaScript之繼承模式(聖杯模式)

1.傳統形式 過多的繼承了沒用的屬性 2.借用建構函式 不能繼承借用建構函式的原型 每次建構函式都要多走乙個函式 function person name,age,function student name,age,tel,grade 3.共享原型 不能隨便改動自己的原型 father.protot...