Вопрос

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

Например:

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

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

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

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

Возможно ли это вообще?

Это было полезно?

Решение 2

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

  • Fire Fox
  • Сафари 3+
  • Опера 9.5+

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

Другие советы

variable [property] - это то же самое, что и точечная нотация, поэтому вы делаете 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') };"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top