鍍金池/ 問答/HTML/ es5 原型鏈繼承,子類調(diào)用父類方法問題

es5 原型鏈繼承,子類調(diào)用父類方法問題

代碼如下:


function Person(name){
    this.name=name;
    this.className="person";  //私有屬性,只能通過方法訪問,不能通過對象直接訪問
}
Person.prototype.getClassName=function(){
    console.log(this.className);
    console.log('over');
}

function Man(){
  console.log('start');
}

Man.prototype=new Person();//1    通過原型鏈的指向來繼承
// Man.prototype=new Man("Davin");//2
var man=new Man();//Man的構(gòu)造函數(shù) 會打印start
// console.log(man.getClassName());
console.log(man.getClassName());  //繼承了之后,可以調(diào)用父類的方法

輸出結(jié)果:

start
person
over
undefined

不知道為什么總是會打印出一個(gè)“undefined”,就是在“console.log(man.getClassName()); ”這一句打印的,要是把這一句注釋掉,就不會有了,那這個(gè)打印是怎么來的那?

回答
編輯回答
艷骨

function Person(name,className){

this.name=name;
this.className="person";  //私有屬性,只能通過方法訪問,不能通過對象直接訪問

}
你這里的成員都沒有編寫,后面通過——proto——原型上查找都沒有,肯定返回undifined。

2017年12月5日 21:33
編輯回答
冷溫柔

JavaScript高級程序設(shè)計(jì)(第3版)第64頁,函數(shù)不設(shè)置return,默認(rèn)放回undefined。

2018年6月16日 13:07
編輯回答
青檸

var className = man.getClassName()
console.log(className, className === undefined);

2017年5月20日 19:50
編輯回答
拽很帥

這里沒有任何問題,這里最后一個(gè)undefined是
console.log(man.getClassName()); //繼承了之后,可以調(diào)用父類的方法
getClassName沒有return值,所以返回undefined,前面的都是正常執(zhí)行,
你可以在

Person.prototype.getClassName=function(){
    console.log(this.className,'沒找到');
    console.log('over','over');
    return 1;
}

看看結(jié)果就變了
start
person
over
1

2017年7月1日 07:38