是否可以在javascript中创建属性?

时间:2009-08-05 17:31:55

标签: javascript arrays properties overloading

我想创建一个自定义Array对象,它接收一个数字作为索引,并且根据索引的值,它将返回一个计算值。

例如:

>>> var MyArray(2);
>>> MyArray[2];
4
>>> MyArray.2;
4

我知道对于显示的示例,我最好使用一个函数,但我想知道是否可以覆盖属性/索引查找某些概念数组,但可能需要一些计算。

我知道x.1 == x[1],所以我需要的是在javascript中创建一个属性。

我的意思是,请x.variable = x.myPropery(),所以每当我得到x.variable的值时,我都会收到x.myPorperty()的回复。

这甚至可能吗?

2 个答案:

答案 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

  • 火狐
  • Safari 3 +
  • Opera 9.5 +

Internet Explorer(任何一个版本)在这方面都缺乏。