Можно ли сделать свойство в javascript? - PullRequest
2 голосов
/ 05 августа 2009

Я хочу создать пользовательский Array объект, который получает число в качестве индекса, и в зависимости от значения индекса он будет возвращать вычисленное значение.

Например:

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

Я знаю, что для показанного примера мне лучше с функцией, но я хочу знать, могу ли я переопределить поиск свойств / индекса для некоторых вещей, которые являются концептуальными массивами, но могут потребовать некоторых вычислений. *

Я знаю, что x.1 == x[1], поэтому мне нужно создать свойство в javascript.

Я имею в виду, сделать x.variable = x.myPropery(), поэтому каждый раз, когда я получаю значение x.variable, я получаю возврат x.myPorperty().

Это вообще возможно?

Ответы [ 2 ]

2 голосов
/ 05 августа 2009

переменная [свойство] совпадает с точечной нотацией, поэтому вы делаете MyArray.2, которая является переменной, а не методом, который оценивается. В действительности вы не можете делать то, что хотите, без метода, который изменяет свойство, когда оно назначено, или метода, который вычисляет правильное значение, когда вы его извлекаете.

И нет, вы не можете переопределить [], это просто точечная запись, это не совсем индекс, который вы можете переопределить

Re: ваш комментарий, Абсолютно, вы можете сделать

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 голос
/ 20 августа 2009

В настоящее время Получение и установка Javascript возможны только на

  • Firefox
  • Safari 3 +
  • Опера 9,5 +

В этом отношении отсутствует Internet Explorer (в любой из его версий).

...