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、これは でuberあり、そのメソッドは再びです。twoDShape.prototypeShapetoStringShape.prototype.toString

そしてそれは無限ループを引き起こします。

于 2012-10-19T08:50:27.613 に答える
0

さて、かなりの量のテストを試みた後、ようやく手がかりが得られました。そして、これが上記の私自身の質問に対する答えだと思います。タイプ: a.constructor.uber.constructor === firefox で twoDShape を実行すると、true が返されます。そして、それが無限ループを引き起こす理由です。

于 2012-10-19T09:07:50.643 に答える