当前,该代码为对象的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;
}
},
我并不是说这是一个好主意,这只是您实现自己想要做的事情的方式。