当前,该代码为对象的selectedID属性定义了获取/设置方法。该对象称为组件。

_selectedID: null,

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

尽管从浏览器知道如何处理所生成的javascript的 Angular 来看这是可行的,但是Visual Studio指出存在语法警告。

这是说同一件事的另一种方式,但是缺少前者的OOPness:

(编辑:显然我可以在这里使用它而不是组件,因此“缺少OOPness”并不是一个大问题,但是如果更好的话仍然会感到好奇)。
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时,getter警报不会触发。

最佳答案

Javascript中没有方法重载,因此您只需使用 setter 重新定义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;
    }
},

我并不是说这是一个好主意,这只是您实现自己想要做的事情的方式。

10-06 15:28