Closed otakustay closed 8 years ago
示例代码:
let Super = oo.create({}); let Sub = function () {}; Object.setPrototypeOf(Sub, Super); Sub.toString(); // StackOverflow
原因分析:
kclass.toString
toString
this.prototype.constructor.toString()
Object.setPrototypeOf
Sub.toString
Super.toString
Sub.prototype.constructor
Sub
toString()
更进一步:
这个问题不仅仅存在于setPrototypeOf上,当一个“继承”函数同时满足以下条件:
setPrototypeOf
prototype.constructor
的情况下,这个toString()就会导致死循环
示例代码:
原因分析:
kclass.toString
toString
的实现实际上是this.prototype.constructor.toString()
Object.setPrototypeOf
会让Sub.toString
与Super.toString
相同Sub.prototype.constructor
其实就是Sub
自身toString()
会导致死循环更进一步:
这个问题不仅仅存在于
setPrototypeOf
上,当一个“继承”函数同时满足以下条件:prototype.constructor
为自身的情况下,这个
toString()
就会导致死循环