es5 原型链继承,子类调用父类方法问题

代码如下:



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的构造函数 会打印start

// console.log(man.getClassName());

console.log(man.getClassName());  //继承了之后,可以调用父类的方法

输出结果:


start

person

over

undefined

不知道为什么总是会打印出一个“undefined”,就是在“console.log(man.getClassName()); ”这一句打印的,要是把这一句注释掉,就不会有了,那这个打印是怎么来的那?


浮云间
浏览 698回答 4
4回答

慕森王

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

温温酱

这里没有任何问题,这里最后一个undefined是console.log(man.getClassName()); //继承了之后,可以调用父类的方法getClassName没有return值,所以返回undefined,前面的都是正常执行,你可以在Person.prototype.getClassName=function(){    console.log(this.className,'没找到');    console.log('over','over');    return 1;}看看结果就变了start person over 1

杨魅力

JavaScript高级程序设计(第3版)第64页,函数不设置return,默认放回undefined。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript