Функциональный объект в массиве объектов - PullRequest
1 голос
/ 18 июня 2011

Я пытаюсь реализовать модель в javascript объектно-ориентированным способом.Скажем, у меня есть объект X с кучей функций.Я хочу иметь массив объектов "в X", чтобы некоторые его поля указывали на некоторые функции в X. Вот пример того, что я пробовал:

function X(){

this.open = function(e){...};
this.run = function(e){...};
this.close = function(e){...};
//...

this.STATES = {
    1: {name : "opening", applyAction : this.open},
    2: {name : "runing", applyAction : this.run},
    3: {name : "closing", applyAction : this.close},
    //...
};

this.currentState = this.STATES[1];

//...

this.update = function(e){
    //...
    currentState.applyAction(e);
    //...
}

Однако этот подход не работает должным образом.Я не могу понять, что не так, даже если у вас есть альтернативный способ сделать то же самое, я был бы очень признателен.

1 Ответ

1 голос
/ 18 июня 2011

Это не сработает, потому что «this» внутри следующего кода указывает на литеральный объект, который вы определяете, а не на предназначенное «this»:

this.STATES = {
    1: {name : "opening", applyAction : this.open},
    2: {name : "runing", applyAction : this.run},
    3: {name : "closing", applyAction : this.close},
    //...
};

Попробуйте

function X() {
    var self = this;

    this.open = function() {
        // ...
    }

    this.STATES = {
        1: {name: "opening", applyAction: self.open},
        ...

Я бы также прочитал о Javascript scoping.

...