gpt4 book ai didi

javascript - 寻找 javascript getter/setter equiv。不会产生警告

转载 作者:行者123 更新时间:2023-11-29 17:25:44 25 4
gpt4 key购买 nike

目前有此代码为对象的 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 });

请注意,我需要说的不是 this,而是 Components,因为这是在 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 时,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;
}
},

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

关于javascript - 寻找 javascript getter/setter equiv。不会产生警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9008541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com