为了账号安全,请及时绑定邮箱和手机立即绑定

对于prototype和new的疑问

我将

fNOP.prototype =  this.prototype;
fBound.prototype = new fNOP();

替换为

fBound.prototype = fNOP.prototype =  this.prototype;

使用 func() 或者 new func()结果都和没有改变,所以我不是太明白这里。

正在回答

5 回答

自問自答好開森哇

0 回复 有任何疑惑可以回复我~
#1

JFeng 提问者

=。= 标记一下免得忘了,老师我写的对不对。
2015-08-19 回复 有任何疑惑可以回复我~

100对7取模(取余数)

rybkffjwjs

0 回复 有任何疑惑可以回复我~

我来补充一下,不知道对不对:

我纠结的地方主要是为什么要“中转”(fNOP.prototype =  this.prototype;)?

  • 根据知乎有关继承文章里的解释,简单来说:a.prototype = b.prototype 这种方式会导致一方修改值另一方也会跟着改变,不能算是继承,所以需要使用new XXX()的方式继承fBound(func)。

  • 但是因为this没有办法直接使用 a.prototype = new b() 的方式进行继承操作。

  • 所以需要进行“中转”操作,也就是“fNOP.prototype = this.prototype”,中转后就可以使用new XXX()的方式了。

  • 其实在ES5中相当于fBound.prototype = Object.create(this.prototype);,这样在ES5中对于this.prototype就不用“中转”操作了。


1 回复 有任何疑惑可以回复我~

我明白这里的区别是什么了,方法一会拷贝一个fNOP的prototype给fBound,由于是拷贝所以修改fBound的prototype不会影响到fNOP的prototype。

其实这两种方法是等价的:

fNOP.prototype = this.prototype;
fBound.prototype = new fNOP();


fBound.prototype = Object.creat(this.prototype);


1 回复 有任何疑惑可以回复我~
#1

meow_meow

完美!
2016-03-10 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript深入浅出
  • 参与学习       281119    人
  • 解答问题       1020    个

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

进入课程

对于prototype和new的疑问

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信