猿问

请问一个js继承中的问题?

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出 了,

这是为什么

慕盖茨0887536
浏览 1208回答 1
1回答

qq_冲哥_0

当你调用alert (this)的时候,它默认会toString()方法,把this 转换成字符串,进行输出,你用下面的代码把toString 重写了,所以它会调用你写的toString() 方法,而你的toString方法中是 alert(this), 所以又会调用toString方法,造成了循环引用,最后导致内存不足,报错Uncaught RangeError: Maximum call stack size exceeded;Grandfather.prototype.toString=function(){alert(this)};
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答