Javascript Наследование бесконечный цикл

голоса
18

Я создаю этот блок кода в 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());

Я не знаю, почему, но когда я запускаю его, светлячок замораживания. Я пытался часов, чтобы понять это. И я думаю, должна быть бесконечной петли в моем коде, и он живет где-то в состоянии, если, но я не нашел его. Может кто-то помочь мне от этой головной боли. Спасибо!

Задан 19/10/2012 в 07:33
пользователем
На других языках...                            


2 ответов

голоса
2

При вызове this.constructor.uber.toString()из Shape.prototype.toString, uberэто twoDShape.prototypeкоторый является Shape, и таким образом , что toStringметод Shape.prototype.toStringснова.

И это вызывает бесконечный цикл.

Ответил 19/10/2012 в 07:50
источник пользователем

голоса
0

ну, после попытки изрядного количества теста, я, наконец, получил ключ. И я считаю, что это ответ на свой вопрос выше. Typing: a.constructor.uber.constructor === TwoDShape в светлячок, он возвращает истину. И именно поэтому он вызывает бесконечный цикл.

Ответил 19/10/2012 в 08:07
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more