js构造函数继承的问题?

myfn.b();//0 这个输出结果有点不明白。

function fn() {
    this.a = 0;
    this.b = function() {
        alert(this.a)
    }
}
fn.prototype = {
    b: function() {
        this.a = 20;
        alert(this.a);
    },
    c: function() {
        this.a = 30;
        alert(this.a);
    }
}
var myfn = new fn();
myfn.b();//0
myfn.c();//30
阅读 1.7k
2 个回答

这是因为实例首先会调用实例方法,在原型链上的b方法没有被调用而导致的。

楼上的说法正确的。JavaScript继承机制是这样的,如果实例对象自身就有某个属性或方法,它就不会再去原型对象寻找这个属性或方法。学习javascript可以花一些时间学习以下阮一峰老师的博客,内容准确度较高,讲解的也比较清楚,比如你的问题就可以在这篇里面看到答案:
prototype 对象

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