@andreysuha
Что то знаю

Можно ли сделать сетеры для методов массива?

В js можно делать геттеры и сеттеры для свойств объекта через definePropеrty или через get и set в es6 классах. Можно ли сделать сеттер для методов массива, например для push, но что бы не переопределять нативный метод ну и не писать обертки типа
{
    items: [],
    addItem(val) {
        this.items.puhs(val)
    }
}
  • Вопрос задан
  • 179 просмотров
Решения вопроса 3
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
JS вполне себе динамический язык, позволяющий многое, но некоторыми вещами стоит пользоваться с осторожностью, чтобы потом не было мучительно больно это отлаживать.
Нужные методы можно подменить, просто перезаписав в них новые функции, но лучше делать это не глобально для всех массивов на прототипе, а на конкретном инстансе массива, например так:
const arr = []; // создали массив
arr.push = function() { // перезаписываем конкретно его push
  Array.prototype.push.apply(this, arguments); // вызвали оригинальный push со всеми аргументами
  // тут делаем еще что-то
};

Еще что-то может производить неожиданный эффект, который впоследствии доставит боли при дебаге такого кода, поэтому как рекомендовали выше, лучше пользоваться декоратором, но метод вполне рабочий, и используется например в vue.js для отслеживания изменений в массивах
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Может, переопределить метод на экземпляре?
var a = [];
a.push = function() {
  Array.prototype.push.apply(this, arguments);
  // todo
  console.log("QnA.habr");
}

a.push(5); // QnA.habr
a.toString() // Array [ 5 ]
Ответ написан
Комментировать
MrDecoy
@MrDecoy Куратор тега JavaScript
Верставший фронтендер
<классическое отступление>
Делать подобные вещи, а так же переопределять прототип - считается плохим тоном. 
Написание, как Вы выразились "обёртки" - лучший выбор.
</классическое отступление>


Гетеры и сетеры это по своему существу - методы.
.push() - тоже метод.
Вы хотите установить метод для метода? Крайне маловероятно.

Ближайшее что Вам, гепотетически, может помочь - Proxy или декораторы
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы