在模擬javascrpt類的時(shí)候需要的一項(xiàng)工作就是construtor重新修訂問題,下面簡(jiǎn)要說一下。
//說明一下constructor作用
function C(){};
function P(){};
C.prototype=P.prototype;//把C的原型指向了P的原型
C.prototype.constructor;// function P(){} C函數(shù)的原型的constructor是P函數(shù)。這里是原型鏈的內(nèi)容,即C的prototype上有一個(gè)constructor屬性,本來(lái)是指向C函數(shù)的寻拂。但是當(dāng)C.prototype=P.prototype時(shí),就指向了P丈牢。
其實(shí)construtor的作用就是重寫原型鏈祭钉,方式繼承的時(shí)候原型鏈更改到別的函數(shù)上。下面是一個(gè)例子
//父類
function Parent(){};
Parent.prototype.eating=function(){console.log("eat")};
Parent.prototype.driking=function (){console.log("drinking")};
//子類
function Children(){};
Children.prototype.playing=function(){console.log("playing")};
Children.prototype=Parent.prototype;
var children=new Children();
children.playing;//undefined
上面的代碼中赡麦,沒有重新修訂Children函數(shù)的原型指向朴皆,所以當(dāng)重新調(diào)用chilren.playing的時(shí)候,就無(wú)法通過原型鏈查找到對(duì)應(yīng)的方法泛粹。
下面的代碼是經(jīng)過修訂后的遂铡,就可以獲取原型鏈上對(duì)應(yīng)的方法
//父類
function Parent(){};
Parent.prototype.eating=function(){console.log("eat")};
Parent.prototype.driking=function (){console.log("drinking")};
//子類
function Children(){};
Children.prototype=Parent.prototype;
//一定要先重新修訂contructor的指定,然后在在原型鏈prototype上掛函數(shù)晶姊。
Children.prototype.constructor=Children;
Children.prototype.playing=function(){console.log("playing")};
var children=new Children();
children.playing;//playing
最后總結(jié)一下就是扒接,先父類===》》再子類===》》再繼承父類===》》重新修訂子類constructor===》》在子類原型掛接方法