JavaScript高程3中的一个关于继承的问题

高程3(P163)上关于原型链的一段代码,我把输出换成getSubValue()后,试着交换其中两段代码的顺序,结果报错,怎么都想不通为什么??

function superType(){
    this.property = true;
}

superType.prototype.getSuperValue = function(){
    return this.property;
};

function subType(){
    this.subproperty = false;
}

// subType.prototype.getSubValue = function(){
//     return this.subproperty;
// }; 
//Uncaught TypeError: instance.getSubValue is not a function

subType.prototype = new superType();

subType.prototype.getSubValue = function(){
    return this.subproperty;
}; // 此段代码与换到上面注释的位置则出错

var instance = new subType();
console.log(instance.getSubValue());
阅读 2.1k
3 个回答

看看《高程》166页,有对你这个问题进行说明。

你这句话重写了原型链subType.prototype = new superType();
你放到上面去,subType的原型就被superType的原型覆盖了,
所以根本找不到getSubValue这个方法

function superType(){
    this.property = true;
}

superType.prototype.getSuperValue = function(){
    return this.property;
};

function subType(){
    this.subproperty = false;
}

subType.prototype = new superType();

 subType.prototype.getSubValue = function(){
     return this.subproperty;
 }; 
//Uncaught TypeError: instance.getSubValue is not a function


var instance = new subType();
console.log(instance.getSubValue());

其中只是将位置换了一下,由于你的 prototype 指向对象被转移,导致你的方法找不到
简单点说 就是 :instance 对象没有getSubValue 方法 superType 这个对象 也没有 getSubValue 方法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题