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 核心...