Простое наследование - PullRequest
       4

Простое наследование

3 голосов
/ 25 августа 2011

Я пытаюсь использовать простое наследование от http://ejohn.org/blog/simple-javascript-inheritance/, и у меня есть следующий код:

var resources = [];

var Entity = Class.extend({
    pos : {
        x: 0,
        y: 0
    },
    init : function(x, y) {
        this.pos.x = x;
        this.pos.y = y;
    },
    toString : function() {
        return this.pos.x + ' | ' + this.pos.y;
    }
});

var bFunc = Entity.extend({
    init : function(x, y) {
        this._super(x, y)
    }
});

var cFunc = Entity.extend({
    init : function(x, y) {
        this._super(x, y)
    }
});

var Func = Class.extend({
    init : function() {
        this.b = new bFunc(1, 10);
        resources.push(this.b);
        this.c = new cFunc(5, 10);
        resources.push(this.c);
    },
    print : function() {
        for(var i in resources) {
            console.log(resources[i].toString());
        }
    }
});

var func = new Func();
func.print();

Когда я запускаю вышеупомянутое, я вижу это в консоли:

5 | 10
5 | 10

Но я настроен:

this.b = new bFunc(1, 10); // 1, 10
resources.push(this.b);
this.c = new cFunc(5, 10); // 5, 10
resources.push(this.c);

Почему я не получаю следующее?

1 | 10
5 | 10

1 Ответ

1 голос
/ 25 августа 2011

Это просто ваша итерация для for (var i in resources). Это не итерация индекса массива, а перечисление объектов.

Так что попробуйте:

    print : function() {
        for(var r in resources) {
            console.log(r.toString());
        }
    }

В противном случае с помощью обозначения индекса массива вы можете сделать что-то вроде:

    print : function() {
        for(var i = 0; i < resources.length; i++) {
            console.log(resources[i].toString());
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...