我想创建一个自定义Array
对象,它接收一个数字作为索引,并且根据索引的值,它将返回一个计算值。
例如:
>>> var MyArray(2);
>>> MyArray[2];
4
>>> MyArray.2;
4
我知道对于显示的示例,我最好使用一个函数,但我想知道是否可以覆盖属性/索引查找某些概念数组,但可能需要一些计算。
我知道x.1 == x[1]
,所以我需要的是在javascript中创建一个属性。
我的意思是,请x.variable = x.myPropery()
,所以每当我得到x.variable
的值时,我都会收到x.myPorperty()
的回复。
这甚至可能吗?
答案 0 :(得分:2)
变量[property]与点表示法相同,因此您正在执行MyArray.2,它是一个变量,而不是一个被评估的方法。如果没有在分配属性时更改属性的方法,或者在拉出属性时计算正确值的方法,则无法实际执行所需操作。
不,你不能覆盖[],简单的点符号,它不是一个你可以覆盖的索引
回复:你的评论,绝对,你可以做到
var x = new Array();
x[1] = function () { alert('x') };
var myFunction = x[1];
x[1](); // alerts "x"
myFunction(); // alerts "x"
alert(x[1]); // alerts "function () { alert('x') };"
alert(myFunction); // alerts "function () { alert('x') };"
答案 1 :(得分:1)
目前只有Javascript Getters and Setters are possible
Internet Explorer(任何一个版本)在这方面都缺乏。