現實中的繼承大部分都是複製乙份
在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 指標指向原型物件。那...