目前有这个代码为对象的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声明存在语法警告。
这是说同样的事情的另一种方式,但缺乏前一个的OOP:
(编辑:显然我可以在这里使用它而不是组件,因此'缺乏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 });
请注意,我不需要这样说,我需要说组件,因为这是在Component的对象构造函数之外设置的。如果我尝试将函数移动到构造函数中,则会出现语法错误。
有谁知道是否有可能同时实现这两项目标?类似的东西:
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
时,吸气警报不会触发。
答案 0 :(得分:5)
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;
}
},
我并不认为这是一个好主意,它只是你想要实现的目标。
答案 1 :(得分:0)
尝试这样的事情:
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;
}
}
}