4 个回答
function SuperType(){
    this.property = true;
}
SuperType.prototype.getSuperValue = function(){
    console.log(this);
    return this.property;
}
function SubType(){
    this.property = false;
}
SubType.prototype = new SuperType();
var instance = new SubType();
console.log(instance.getSuperValue());

楼主应该是想做这样吧,new SubType()之后,instance有属性property,原型链上有属性property和方法getSuperValue。
图片描述

在调用方法和属性是一层一层往上找,所以自然是false,如果按楼主所展示的,那肯定是true。

返回true
实例instance只有一个实例属性,即subProperty。当运行那个方法时在实例中找不到property,就会到原型中查找,找到了,值为true

楼主最好贴出代码,方便对你作出回答的人调试代码,对人对己都有利,你不可能让大家都对着图片重打一遍你的代码,是吧?

补充: 因为你在代码里面只有一个property,对于新手来讲,不足以造成疑惑,个人感觉,我猜楼主想要搞清楚如下代码的输出:

function superT () {
    this.p = true
}
superT.prototype.getP = function(){
    return this.p
}

function subT() {
    this.p = false
}

subT.prototype = new superT()
var ins = new subT()

console.log(ins.getP())

这边输出的是false,而你的代码输出的是true
等待楼主对我的疑问进行确认

怎么 看 都 不可能是 false 吧
先不说 原型链 的 问题
就拿 getSuperValue 方法 里面 this.property 和 函数 SubType 里面的 this.subProperty 前者 是 访问 当前 调用 对象 的 property 属性 后者 是 设置 当前调用对象 subProperty 属性 两个 属性 名 都 不一样
如果 属性 名 一样 的 话 那 输出 就是 false

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