面試 js實現繼承的幾種方式

2021-09-16 12:12:23 字數 1876 閱讀 7243

function father() 

father.prototype.getfaname = function() ;

function child()

child.prototype = new father();

child.prototype.constructor = child;

child.prototype.getchname = function() ;

var c1=new child();

c1.names.push("sasa");

var c2=new child();

console.log(c2.names) //原型上的names屬性被共享了 不是我們所需要的

這種繼承會有如下的缺點:

1、如果父類包含有引用型別的屬性 所有的子類就會共享這個屬性。

2、在建立子類的例項時 不能向父類的建構函式傳遞引數

原型繼承+建構函式的繼承

function father(name) 

father.prototype.getfaname = function() ;

function child(args)

child.prototype = new father(); //第一次呼叫父類建構函式

child.prototype.constructor = child;

child.prototype.getchname = function() ;

子類繼承父類的屬性,一組在子類例項上,一組在子類原型上(在子類原型上建立不必要的多餘的屬性)

function father(name) 

father.prototype.getfaname = function() ;

function object(o) ;

f.prototype = o;

return new f();

}/**

* 通用方法實現子類繼承父類

* @param child 子類建構函式

* @param father 被繼承的父類建構函式

*/function inheritprototype(child, father)

function child(args)

inheritprototype(child, father); //子類的原型等於new 空函式(), 而new 空函式()出來的物件的原型等於父類的原型

child.prototype.getchname = function() ;

console.log( child.prototype.isprototypeof(new child()) ); //true

console.log(new child() instanceof child); //true

優點:1.只呼叫一次父類的建構函式,避免了在子類原型上建立不必要的,多餘的屬性

2.原型鏈保持不變
class father

getname()

}class child extends father

sayhello()

static hh()

}var cc=new child("juanjuan");

cc.sayhello();

cc.getname(); //juanjuan

child.hh(); //hh

cc.names.push("wqwq");

var c1=new child("sasasa");

console.log(c1.names) //[1,2,3]

js實現繼承的幾種方式

一,js中物件繼承 js中有三種繼承方式 1.js原型 prototype 實現繼承 複製 如下 2.建構函式實現繼承 複製 如下 複製 如下 js手冊中對call的解釋 複製 如下 call 方法 呼叫乙個物件的乙個方法,以另乙個物件替換當前物件。call thisobj arg1 arg2 ar...

JS實現繼承的幾種方式

取自 1.js實現繼承的幾種方式 2.js 物件導向之繼承 多種組合繼承 js作為物件導向的弱型別語言,繼承也是其非常強大的特性之一。那麼如何在js中實現繼承呢?讓我們拭目以待。既然要實現繼承,那麼首先我們得有乙個父類,如下 定義乙個動物類 function animal name 原型方法 ani...

JS實現繼承的幾種方式

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