【发布时间】: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