【问题标题】:Looking for javascript getter/setter equiv. which does not generate warnings寻找 javascript getter/setter equiv。不会产生警告
【发布时间】:2012-01-25 18:58:20
【问题描述】:

目前有此代码为对象的 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 的意义上有效,但 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 警报不会触发。

【问题讨论】:

  • 那么,您想放弃整个 get/set 语法,因为您在 Visual Studio 中收到警告吗?为什么要这么做?这就像避免某些单词,因为拼写检查器无法识别它们。

标签: javascript jquery oop get set


【解决方案1】:

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

我并不是说这是一个好主意,这正是您实现目标的方式。

【讨论】:

  • jQuery 似乎经常这样做。
【解决方案2】:

试试这样的:

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

【讨论】:

    猜你喜欢
    • 2014-12-08
    • 1970-01-01
    • 2015-02-06
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多