5

我在 javascript 中创建了这段代码:

function Shape() {}
Shape.prototype.name = "Shape";
Shape.prototype.toString = function() {
    result = [];
    if(this.constructor.uber) {
        result[result.length] = this.constructor.uber.toString();
    }
    result[result.length] = this.name;
    return result.join(', ');
}


function twoDShape() {};
twoDShape.prototype = new Shape();
twoDShape.prototype.constructor = twoDShape;

twoDShape.uber = twoDShape.prototype;
twoDShape.name = "twoD Shape";

var a = new twoDShape();
console.log(a.toString());

我不知道为什么,但是当我运行它时,Firefox 冻结了。我一直在努力解决这个问题。我的猜测是我的代码中应该有一个无限循环,它存在于 if 条件的某个地方,但我没有找到它。有人可以帮我摆脱这种头痛。谢谢!

4

2 回答 2

2

当您this.constructor.uber.toString()Shape.prototype.toString, uberis twoDShape.prototypewhich is a调用时,ShapetoString方法Shape.prototype.toString又是。

这会导致无限循环。

于 2012-10-19T08:50:27.613 回答
0

好吧,在尝试了相当多的测试之后,我终于得到了一个线索。我相信这是我上面自己问题的答案。在firefox中输入:a.constructor.uber.constructor === twoDShape,它返回true。这就是为什么它会导致无限循环。

于 2012-10-19T09:07:50.643 回答