原型继承中有一步是
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;
到底有什么实际用途
看起来楼主混淆了两个概念:函数和对象。
看你写的原型继承这里:
你知道这里的
Zi
是什么吗?你的上下文没有说明Zi
的定义,但是他有prototype
这个属性,所以我推断他是一个函数。然后看这行代码:
那这里的
Zi
又是什么呢?这里的Zi
是Object.create
的返回值,这是一个对象!!所以这两个有啥区别?
这两个有本质区别啊!上面的
Zi
是函数,可以直接用Zi()
调用,下面的Zi
是对象,不能作为函数调用啊!下个问题,这行代码到底有啥用?
一般的你创建一个函数:
他的原型上会有一个
Zi.prototype.constructor
,这个值就是Zi
。当你运行了Zi.prototype = Object.create(Fu.prototype);
这个值会被改为
Fu.prototype.constructor
,也就是Fu
,所以需要重置回来。上面说了这么多,其实讲得也不够透彻,你想深入了解原型链需要懂JS的面向对象,推荐你看下这篇文章,讲的很透彻:https://segmentfault.com/a/11...