Ищете JavaScript для получения / установки экв. который не генерирует предупреждения - PullRequest
2 голосов
/ 25 января 2012

В настоящее время этот код определяет геттер / сеттер для свойства selectedID объекта.Объект называется Компоненты.

_selectedID: null,

get SelectedID() {
    return this._selectedID;
},
set SelectedID(val) {
    if (!isNaN(val) && val != this._selectedID) {
        this._notifyChanged(val);
        this._selectedID = val;
    }
},

Хотя это работает в том смысле, что браузер знает, как обрабатывать сгенерированный javascript, Visual Studio заявляет, что есть синтаксические предупреждения.Можно сказать то же самое, но не хватает ООПтности предыдущего:

(РЕДАКТИРОВАТЬ: Очевидно, я могу использовать это вместо компонентов здесь, так что «отсутствие ООП» не так уж много проблем, но все жеЛюбопытно, если лучше).

function GetSelectedID() {
    //return Components._selectedID;
    return this._selectedID;
}

function SetSelectedID(val) {
    //if (!isNaN(val) && val != Components._selectedID) {
        //Components._notifyChanged(val);
        //Components._selectedID = val;
    //}

    if (!isNaN(val) && val != this._selectedID) {
        this._notifyChanged(val);
        this._selectedID = val;
    }
}

Object.defineProperty(Components, 'SelectedID', { get: GetSelectedID
                                       , set: SetSelectedID
                                       , configurable: true
                                       , enumerable:   true });

Обратите внимание, что вместо того, чтобы говорить это, мне нужно сказать Компоненты, так как это происходит за пределами конструктора объекта Компонента.Если я пытаюсь переместить функции в конструктор, я получаю синтаксические ошибки.

Кто-нибудь знает, возможно ли достичь обоих?Что-то вроде:

SelectedID: function () {
    alert("Getter");
    return this._selectedID;
},

SelectedID: function (val) {
    alert("setter");
    if (!isNaN(val) && val != this._selectedID) {
        this._notifyChanged(val);
        this._selectedID = val;
    }
},

Приведенный выше код не работает, хотя.Когда я говорю Components.SelectedID, оповещение получателя не срабатывает.

Ответы [ 2 ]

5 голосов
/ 25 января 2012

В Javascript нет перегрузки методов, поэтому вы просто переопределяете SelectedID с помощью установщика.

Если вы хотите использовать один метод для обоих, попробуйте что-то вроде этого:

SelectedID: function() {
    if (arguments.length === 1) {
        var val = arguments[0];
        if (!isNaN(val) && val != this._selectedID) {
            this._notifyChanged(val);
            this._selectedID = val;
        }
    } else {
        return this._selectedID;
    }
},

Я не утверждаю, что это хорошая идея, это просто способ добиться того, что вы пытаетесь сделать.

0 голосов
/ 25 января 2012

Попробуйте что-то вроде этого:

SelectedID: function (val) {
    if (val === undefined) {
        alert("Getter");
        return this._selectedID;
    } else {
        alert("setter");
        if (!isNaN(val) && val != this._selectedID) {
            this._notifyChanged(val);
            this._selectedID = val;
        }
    }
}
...