function extend(Father,Son){ var F=function(){}; F.prototype=Father.prototype; Son.prototype=new F(); Son.prototype.constructor=Son; Son.uber=Father.prototype; } function Grandfather(){} Grandfather.prototype.toString=function(){ alert(this)}; function Father(){}; extend(Grandfather,Father); function Son(){}; extend(Father,Son); var p=new Son();p.toString();这段代码会报错Uncaught RangeError: Maximum call stack size exceeded;可我将Grandfather.prototype.toString的alert改为console.log就可以正常运行了,后来我把toString改下名又可以正常alert出 了,这是为什么
1 回答
qq_冲哥_0
TA贡献40条经验 获得超30个赞
当你调用alert (this)的时候,它默认会toString()方法,把this 转换成字符串,进行输出,你用下面的代码把toString 重写了,所以它会调用你写的toString() 方法,而你的toString方法中是 alert(this), 所以又会调用toString方法,造成了循环引用,最后导致内存不足,报错Uncaught RangeError: Maximum call stack size exceeded;
Grandfather.prototype.toString=function(){
alert(this)
};
添加回答
举报
0/150
提交
取消