关于JavaScript中 原型继承有一点不理解

原型继承中有一步是

Zi.prototype = Object.create(Fu.prototype);

这样造成的结果是不是

Zi.prototype.__proto__===Fu.prototype

如果是的话为啥不直接

Zi = Object.create(Fu.prototype);

这样的话

Zi.__proto__===Fu.prototype

Zi的原型链少一层岂不是更方便?
另外问一下

Zi.prototype.constructor = Zi;

到底有什么实际用途

阅读 361
评论
    3 个回答

    看起来楼主混淆了两个概念:函数和对象。
    看你写的原型继承这里:

    Zi.prototype = Object.create(Fu.prototype);

    你知道这里的Zi是什么吗?你的上下文没有说明Zi的定义,但是他有prototype这个属性,所以我推断他是一个函数。
    然后看这行代码:

    Zi = Object.create(Fu.prototype);

    那这里的Zi又是什么呢?这里的ZiObject.create的返回值,这是一个对象!!
    所以这两个有啥区别?
    这两个有本质区别啊!上面的Zi是函数,可以直接用Zi()调用,下面的Zi是对象,不能作为函数调用啊!

    下个问题,这行代码到底有啥用?

    Zi.prototype.constructor = Zi;

    一般的你创建一个函数:

    Zi = function(){}

    他的原型上会有一个Zi.prototype.constructor,这个值就是Zi。当你运行了
    Zi.prototype = Object.create(Fu.prototype);
    这个值会被改为Fu.prototype.constructor,也就是Fu,所以需要重置回来。

    上面说了这么多,其实讲得也不够透彻,你想深入了解原型链需要懂JS的面向对象,推荐你看下这篇文章,讲的很透彻:https://segmentfault.com/a/11...

      相似问题
      推荐文章