Pergunta

Eu quero fazer um objeto Array personalizado que recebe um número como índice, e dependendo do valor do índice, retornaria um valor calculado.

Por exemplo:

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

Eu sei que para o exemplo mostrou, eu sou melhor com uma função, mas eu quero saber se eu posso substituir o lookup propriedades / index para algumas coisas que são matrizes conceitualmente, mas poderia precisar de alguma computação.

Estou ciente de que x.1 == x[1], então o que eu preciso é fazer uma propriedade em javascript.

Quer dizer, make x.variable = x.myPropery(), então toda vez que eu recebo o valor de x.variable, eu recebo o retorno de x.myPorperty().

Isto é mesmo possível?

Foi útil?

Solução 2

Javascript Getters e Setters são possíveis apenas em

  • Firefox
  • Safari 3 +
  • Opera 9.5 +

Internet Explorer (em qualquer um dos que as versões) está faltando a este respeito.

Outras dicas

variável [propriedade] é o mesmo que a notação de ponto para que você está fazendo MyArray.2, que é uma variável, não um método que é avaliada. Você realmente não pode fazer o que quiser, sem um método que seja altera a propriedade quando ele é atribuído, ou um método que calcula o valor correto quando você retirá-lo.

E não, você não pode substituir [], a sua notação simplesmente ponto, não é realmente um índice que você pode substituir

Re: o seu comentário, absolutamente, você pode fazer

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') };"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top