js中的繼承

2021-10-07 04:27:41 字數 1284 閱讀 6594

現實中的繼承大部分都是複製乙份

在js語言中,它的繼承和其它程式語言還是不太一樣的 ,是查詢父類的私有的和公有的屬性和方法  這種查詢方式的繼承

繼承的目的:讓子類的例項同時也具備父類中私有的屬性和公共的方法

在js中的重寫,直接修改的父類原型,這樣不僅影響其他父類的例項,也影響其他子類的例項

這種非拷貝式的,而是查詢和指向式的基礎,重寫會影響很大

1.=>原型繼承 (讓子類的原型等於父類的例項即可)

child.prototype = new parent; 

核心:child.prototype.__proto__ === parent.prototype

2.=>call繼承(只能繼承父類中私有的,不能繼承父類中公共的)

在子類建構函式中,把父類當做普通方法執行

parent.call(this);

3.寄生組合式繼承(call繼承 + 另類原型繼承)

function child()

child.prototype = object.create(parent.prototype);

child.prototype.constructor = child;

child.prototype.gety = function gety() ;

強制改變子類原型prototype的指向,指向建立的乙個新物件,並且該新物件的原型指向父類原型,

因為是新建立的物件,為了 不破壞原有constructor的指向,所以需要手動加一下child.prototype.constructor = child;

並且強制改變了子類原型的指向,所以子類原型公有的方法定義 必須在改變指向之後再定義,否則就空了

4.es6中的繼承

class parent 

// parent.prototype.getx=function...

getx()

}// 繼承: extends parent(類似於寄生組合繼承)

// 注意:繼承後一定要在constructor第一行加上super

class child extends parent

gety()

}let c1 = new child;

console.log(c1);

// child(); //=>uncaught typeerror: class constructor child cannot be invoked without 'new' es6中建立的就是類,不能當做普通函式執行,只能new執行

js中的繼承

繼承有兩種方式 介面繼承和實現繼承。介面繼承只繼承方法簽名,而實現繼承則繼承實際的方法。由於函式沒有簽名,在ecmascript中無法實現介面繼承。ecmascript只支援實現繼承,而且實現繼承主要依靠原型鏈來實現。下面介紹幾種js的繼承 原型鏈繼承實現的本質是重寫原型物件,代之以乙個新型別的例項...

JS中的繼承

定義乙個動物類 實現下面的繼承 function animal name animal.prototype.eat function food 1 原型鏈繼承 核心 將父類的例項作為子類的原型 function cat cat.prototype new animal cat.prototype.n...

JS中的繼承

對於乙個從事前端開發的工作者,如果對js中的原型 原型鏈 繼承等這些了解不透徹,說明你還是個初學者哦!下面我們來談談繼承這些事吧 建構函式中有乙個 prototype的指標,指向其原型物件,原型物件中有乙個constructor指標指向建構函式,例項中有乙個 prototype 指標指向原型物件。那...