在 Javascript 中编入索引 getter
Indexed getter in Javascript
我正在使用直接 Javascript(请不要使用 JQuery 或类似的东西)。我实现了一个包装数组的 class,因此:
class Ctrls
{
_items = new Array();
constructor()
{
this._items = new Array();
}
Add(oCtrl)
{
this._items.push( { key:oCtrl.Name, value:oCtrl } );
}
Clear()
{
this._items = new Array();
}
get Count()
{
return this._items.length;
}
get Item(index)
{
// get the index'th item.
// If item is numeric, this is an index.
// If item is a string, this is a control name
if (Number.isInteger(index))
{
return this._items(index).value;
}
else
{
item = this._items.find(element => (element.value.Name == index));
return item;
}
}
get Items()
{
return this._items; // in case we desperately need to
}
}
我在 get Item(index)
(即 Uncaught SyntaxError: Getter must not have any formal parameters
)页面加载时遇到错误。我来自 C# 世界,正在寻找等效于:
public Ctrl Item(iIndex)
{
get
{
return _items[iIndex];
}
}
如何在 Javascript 中索引 getter?
Edit(1):我曾建议将 get Item
变成一个函数,但如果我将定义更改为:
function GetItem(index) // returns Ctrl
{
// get the index'th item.
// If item is numeric, this is an index.
// If item is a string, this is a control name
if (Number.isInteger(index))
{
return this._items(index).value;
}
else
{
item = this._items.find(element => (element.value.Name == index));
return item;
}
}
我在页面加载时收到此错误:Uncaught SyntaxError: Unexpected identifier
在行 function GetItem...
Edit(2): 将上面修改为:
GetItem(index) // returns Ctrl
{
// get the index'th item.
// If item is numeric, this is an index.
// If item is a string, this is a control name
if (Number.isInteger(index))
{
return this._items(index).value;
}
else
{
item = this._items.find(element => (element.value.Name == index));
return item;
}
}
as classes 中的函数不使用 function
关键字,这很奇怪。这现在有效。谢谢大家
“你不能在 JS 中将参数传递给 getter”。理论上:是的,你不能那样做。但实际上:函数是 JS 中的 first-class 公民,因此它们可以是函数的参数或 return 值。你可以这样做:
class GetterWithParameter {
constructor() {
this.array = ["index 0", "index 1", "index 2"]
}
get itemAtIndex() {
return (idx) => this.array[idx]
}
}
const getterWithParameter = new GetterWithParameter()
const idx0 = getterWithParameter.itemAtIndex(0)
const idx1 = getterWithParameter.itemAtIndex(1)
const idx2 = getterWithParameter.itemAtIndex(2)
console.log("item at index 0:", idx0)
console.log("item at index 1:", idx1)
console.log("item at index 2:", idx2)
因此,虽然 getter
不能有参数,但您可以 return 一个可以接收参数的函数 - 并使用它。
当然,用法似乎与在 class 上定义需要相同参数的函数相同 - 但您仍然使用 getter
.
我正在使用直接 Javascript(请不要使用 JQuery 或类似的东西)。我实现了一个包装数组的 class,因此:
class Ctrls
{
_items = new Array();
constructor()
{
this._items = new Array();
}
Add(oCtrl)
{
this._items.push( { key:oCtrl.Name, value:oCtrl } );
}
Clear()
{
this._items = new Array();
}
get Count()
{
return this._items.length;
}
get Item(index)
{
// get the index'th item.
// If item is numeric, this is an index.
// If item is a string, this is a control name
if (Number.isInteger(index))
{
return this._items(index).value;
}
else
{
item = this._items.find(element => (element.value.Name == index));
return item;
}
}
get Items()
{
return this._items; // in case we desperately need to
}
}
我在 get Item(index)
(即 Uncaught SyntaxError: Getter must not have any formal parameters
)页面加载时遇到错误。我来自 C# 世界,正在寻找等效于:
public Ctrl Item(iIndex)
{
get
{
return _items[iIndex];
}
}
如何在 Javascript 中索引 getter?
Edit(1):我曾建议将 get Item
变成一个函数,但如果我将定义更改为:
function GetItem(index) // returns Ctrl
{
// get the index'th item.
// If item is numeric, this is an index.
// If item is a string, this is a control name
if (Number.isInteger(index))
{
return this._items(index).value;
}
else
{
item = this._items.find(element => (element.value.Name == index));
return item;
}
}
我在页面加载时收到此错误:Uncaught SyntaxError: Unexpected identifier
在行 function GetItem...
Edit(2): 将上面修改为:
GetItem(index) // returns Ctrl
{
// get the index'th item.
// If item is numeric, this is an index.
// If item is a string, this is a control name
if (Number.isInteger(index))
{
return this._items(index).value;
}
else
{
item = this._items.find(element => (element.value.Name == index));
return item;
}
}
as classes 中的函数不使用 function
关键字,这很奇怪。这现在有效。谢谢大家
“你不能在 JS 中将参数传递给 getter”。理论上:是的,你不能那样做。但实际上:函数是 JS 中的 first-class 公民,因此它们可以是函数的参数或 return 值。你可以这样做:
class GetterWithParameter {
constructor() {
this.array = ["index 0", "index 1", "index 2"]
}
get itemAtIndex() {
return (idx) => this.array[idx]
}
}
const getterWithParameter = new GetterWithParameter()
const idx0 = getterWithParameter.itemAtIndex(0)
const idx1 = getterWithParameter.itemAtIndex(1)
const idx2 = getterWithParameter.itemAtIndex(2)
console.log("item at index 0:", idx0)
console.log("item at index 1:", idx1)
console.log("item at index 2:", idx2)
因此,虽然 getter
不能有参数,但您可以 return 一个可以接收参数的函数 - 并使用它。
当然,用法似乎与在 class 上定义需要相同参数的函数相同 - 但您仍然使用 getter
.