对于prototype和new的疑问
我将
fNOP.prototype = this.prototype; fBound.prototype = new fNOP();
替换为
fBound.prototype = fNOP.prototype = this.prototype;
使用 func() 或者 new func()结果都和没有改变,所以我不是太明白这里。
我将
fNOP.prototype = this.prototype; fBound.prototype = new fNOP();
替换为
fBound.prototype = fNOP.prototype = this.prototype;
使用 func() 或者 new func()结果都和没有改变,所以我不是太明白这里。
2015-05-30
我来补充一下,不知道对不对:
我纠结的地方主要是为什么要“中转”(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就不用“中转”操作了。
举报