2016-06-29 3 views
3

Я задал вопрос, где я был переопределяющим push, используя Object.defineProperty. Оригинальный вопрос: here. Код, над которым я работал, находится на my codepen.Почему это плохая идея переопределить собственные методы?

Пользователь оставил следующий комментарий:

Это плохая идея, чтобы перезаписать нативный метод, как на прототипе или на экземпляры объектов

Почему?

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

Неправильно ли делать то, что я сделал, и если да, то в чем альтернатива?

+4

Ничего себе, мой комментарий привел к следующему вопросу: D Я думаю, у вас есть ваш ответ. – ftor

+0

@ LUH3417 Ненавижу делать вещи, которые считаются некорректными: p Вы подтолкнули меня найти альтернативное, лучшее решение. – BugHunterUK

ответ

7

Одна из проблем, о которых я могу думать, заключается в том, что теперь у вас есть метод push, который очень специфичен для вашей проблемы, и что если вам понадобится обычный метод push. Вы действительно не знаете, будет ли это так или нет, но это может привести к необходимости реорганизации вашего кода позже, чтобы обеспечить как «нормальный толчок», так и «измененный толчок».

Еще одна проблема, о которой я могу думать, заключается в том, что если вы делаете что-то подобное, и вы не единственный, кто работает над кодом, кто-то другой может не знать, что push переопределен и больше не соответствует стандартным поведением.

Это может вызвать потенциальные проблемы. Возможно, вы не сильно изменили его, но в случае, если внесенные вами изменения вызывают ошибку, вы можете оставить кого-то, кто почесывает голову, задаваясь вопросом, почему (по его мнению, обычный) толчок вызывает странное поведение.

+0

Что было бы альтернативой? Я предполагаю объект, который расширяет массив? – BugHunterUK

+4

@BugHunterUK, альтернативой является создание регулярной функции. – elclanrs

+0

@ hansmaad, это правда, даже для вас это было бы проблематично! И, действительно, BugHunterUK, как он и предложил, просто выполняет нормальную функцию для этого ;-) –