Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在JavaScript或TypeScripe中的自定义类中实现索引器?_Javascript_Typescript - Fatal编程技术网

是否可以在JavaScript或TypeScripe中的自定义类中实现索引器?

是否可以在JavaScript或TypeScripe中的自定义类中实现索引器?,javascript,typescript,Javascript,Typescript,我可以在自定义类(如C#)上使用sqare括号吗? 或者,在JavaScript中,方括号是否限制为数组 C#中的等值线如下所示: 公共类联系人 { 私有字符串[]地址=新字符串[3]; 公共字符串此[int索引] { 得到 { 返回地址[索引]; } 设置 { 地址[索引]=值; } } } JavaScript和TypeScript都没有您想要的特定功能,但是JavaScript确实有对象,这些对象非常强大,可以用于此。您需要实现和陷阱处理程序(至少),并让Contact构造函数返回代理,而

我可以在自定义类(如C#)上使用sqare括号吗? 或者,在JavaScript中,方括号是否限制为数组

C#中的等值线如下所示:

公共类联系人
{
私有字符串[]地址=新字符串[3];
公共字符串此[int索引]
{
得到
{
返回地址[索引];
}
设置
{
地址[索引]=值;
}
}
}

JavaScript和TypeScript都没有您想要的特定功能,但是JavaScript确实有对象,这些对象非常强大,可以用于此。您需要实现和陷阱处理程序(至少),并让
Contact
构造函数返回代理,而不是实例本身。(如果从构造函数返回对象,则会覆盖返回新创建实例的默认行为。)代理上的每个属性“读取”都会调用
get
处理程序,代理上的每个属性“写入”都会调用
set
处理程序:

/==实现
const rexAllDigits=/^\d+$/;
常量contactProxyHandlers={
获取(目标、关键){
if(rexAllDigits.测试(键)){
返回target.address[key];
}
返回目标[键];
},
设置(目标、键、值){
if(rexAllDigits.测试(键)){
返回Reflect.set(target.address、key、value);
}
返回Reflect.set(目标、键、值);
}
};
班级联系{
构造函数(){
this.address=[“”,“”,“”];
返回新代理(此为contactProxyHandlers);
}
}
//==用法:
常数c=新触点();
c[0]=“地址0”;
console.log(c[0],c.address[0]);//“地址0”,“地址0”
c、 示例=“非索引属性”;

log(c.example)我甚至从未想过在构造函数中返回代理,但这对于代理来说非常有意义。今天学到了一些新东西。