js 原型链继承

        function Foo1(){
           this.name1 = '1';
        }
        function Foo2(){
           this.name2 = '2';
        }
        Foo2.prototype = new Foo1();
        function Foo3(){
           this.name = '3';
        }
        Foo3.prototype = new Foo2();
        var foo3 = new Foo3();
        console.dir(foo3);

图片描述

各位帮忙分析下,为什么箭头指向的地方打印出来不是Foo2而是Foo1,这是什么原理?

阅读 2k
3 个回答

因为你将Foo1的实例复制给Foo2的原型,这时候Foo2.prototype.constructor指向的是Foo1,如果你在Foo2.prototype=new Foo1后面加一行Foo2.prototype.constructor=Foo2,将constructor重新修改为Foo2。应该就能达到你想要的结果了。

new 的过程是这样的,看下就明白了。

var obj={};
obj._proto_=Father.propotype;
Father.call(obj);
return obj;

Foo3通过prototype属性将原型指向了Foo2,但是最终Foo2的原型也是Foo1

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