На работе мы используем jQuery. Вскоре после того, как мы начали использовать его, я увидел, что несколько разработчиков добавили функции в файл jquery-extensions.js. Внутри я нашел целую кучу методов, добавленных в $
, которые по существу представляют собой статические методы в jQuery. Вот несколько:
$.formatString(str, args) {
...
}
$.objectToArray(obj) {
...
}
Etc. Ни один из них не использует ничего общего с jQuery. Это показалось мне странным.
В конце концов нам понадобилась функция в нашей библиотеке для локализации дат. Моим решением было создать:
Date.prototype.toLocaleDate = function() {
...
}
Date.parseLocalDate = function() {
...
}
Вскоре после этого я заставлю старшего разработчика, спрашивающего меня, что я думаю, что я делаю. Он говорит мне, что здесь, где я работаю, мы не создаем прототипы, потому что они злые. Единственными причинами, которые он дал, было то, что они в основном являются плохими языковыми особенностями, потому что их "можно злоупотреблять" и что это путано, чтобы увидеть прототипы (например, как я могу узнать новую дату(). ToLocaleDate() является прототипом, а не родным ECMAScript). Используя $.formatString(...)
вместо "blah blah".formatString(...)
, мы ясно говорим, что все, что имеет значение $, не является частью собственного JavaScript.
Эти причины кажутся немного глупыми, но я предложил компромисс, поэтому ему не нужно было бы помнить, был ли метод прототипом: префикс имени функции прототипа с помощью $
:
String.prototype.$format = function() {
...
}
"blah blah".$format(...);
Это было быстро отклонено, и теперь мне нужно добавлять эти функции $.myPrototypeAsAFauxStaticMethodOnjQuery() всюду.
Я единственный, кто считает, что эта практика глупа?