js原型繼承的幾種方式

2021-08-17 00:02:53 字數 1667 閱讀 3134

1. 原型鏈繼承

2,建構函式繼承(物件冒充繼承)

3,組合繼承(原型鏈繼承+建構函式繼承)

4,原型式繼承

5. 寄生組合式繼承

一。原型鏈繼承

function show()

function run()

run.prototype=new show();

var run=new run();

alert(run.name)//結果:run

二。建構函式繼承(物件冒充繼承)

為了解決引用共享和超型別無法傳參的問題,我們採用一種叫借用建構函式的技術,或

者成為物件冒充(偽造物件、經典繼承)的技術來解決這兩種問題 

function box(age)

function desk(age)

var desk = new desk(200);

alert(desk.age);//200

alert(desk.name);//['lee','jack','hello']

desk.name.push('aaa'); //新增的新資料,只給 desk

alert(desk.name)//['lee','jack','hello','aaa']

三。組合繼承(原型鏈繼承+建構函式繼承)

借用建構函式雖然解決了剛才兩種問題, 但沒有原型, 復用則無從談起。 所以, 我們需

要原型鏈+借用建構函式的模式,這種模式成為組合繼承。

function box(age)

box.prototype.run = function () ;

function desk(age)

desk.prototype = new box(); //原型鏈繼承

var desk = new desk(100);

alert(desk.run());

四。原型式繼承

這種繼承借助原型並基於已有的物件建立新物件,

同時還不必因此建立自定義型別 

function obj(o) //建立乙個建構函式

f.prototype = o; //把字面量函式賦值給建構函式的原型

return new f(); //最終返回出例項化的建構函式

}var box = ;

var box1 = obj(box); //傳遞

alert(box1.name);

box1.name = 'jack';

alert(box1.name);

alert(box1.arr);

box1.arr.push('父母');

alert(box1.arr);

var box2 = obj(box); //傳遞

alert(box2.name);

alert(box2.arr); //引用型別共享了

五。寄生組合式繼承

寄生組合式繼承解決了兩次呼叫的問題,組合式繼承就會有兩次呼叫的情況

基本模型如下:

function object(o) 

f.prototype = o;

return new f();

}function inheritprototype(subtype, supertype)

後面的寄生式繼承和寄生組合模型式繼承還搞不懂,哈哈哈,好尷尬

js原型繼承的幾種方式

借鑑 1 原型鏈繼承 2 建構函式繼承 物件冒充繼承 3 組合繼承 原型鏈繼承 建構函式繼承 4 原型式繼承 5 寄生組合式繼承 一。原型鏈繼承 an highlighted block unction show function run run.prototype newshow var show...

js繼承幾種方式

js作為物件導向的弱型別語言,繼承也是其非常強大的特性之一。那麼如何在js中實現繼承呢?讓我們拭目以待。既然要實現繼承,那麼首先我們得有乙個父類,如下 定義乙個動物類 function animal name 原型方法 animal.prototype.eat function food 核心 將父...

幾種js的繼承方式

1 繼承第一種方式 物件冒充 function super username function sub username var supernew new super super var subnew new sub sub supernew.hello subnew.hello subnew.wo...