正在查找不生成警告的javascript getter/setter equiv

正在查找不生成警告的javascript getter/setter equiv,javascript,jquery,oop,get,set,Javascript,Jquery,Oop,Get,Set,当前,此代码为对象的selectedID属性定义了getter/setter。该对象称为组件 _selectedID: null, get SelectedID() { return this._selectedID; }, set SelectedID(val) { if (!isNaN(val) && val != this._selectedID) { this._notifyChanged(val); this._sele

当前,此代码为对象的selectedID属性定义了getter/setter。该对象称为组件

_selectedID: null,

get SelectedID() {
    return this._selectedID;
},
set SelectedID(val) {
    if (!isNaN(val) && val != this._selectedID) {
        this._notifyChanged(val);
        this._selectedID = val;
    }
},
虽然这在浏览器知道如何处理生成的javascript的意义上起作用,但VisualStudio声明存在语法警告

这是说同样事情的另一种方式,但缺乏前一种方式的友好性:

(编辑:显然我可以在这里使用它而不是组件,所以“缺少OOP”并不是一个很大的问题,但如果更好的话,仍然很好奇)

注意,我需要说的不是组件,而是组件,因为这是在组件的对象构造函数之外设置的。如果我试图将函数移动到构造函数中,就会出现语法错误

有人知道这两个目标是否都有可能实现吗?比如:

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;
    }
},
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;
        }
    }
}

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

试试这样的方法:

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;
    }
},
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;
        }
    }
}

那么,您想放弃整个get/set语法,因为您在VisualStudio中收到警告?你为什么要那样做?这就像避免使用某些单词,因为拼写检查器无法识别它们。jQuery似乎经常这样做。