Можно ли создать свойство в JavaScript?
-
22-07-2019 - |
Вопрос
Я хочу сделать заказ 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') };"