Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Практика расширения прототипов (ianis.js) (https://javascript.ru/forum/project/51636-praktika-rasshireniya-prototipov-ianis-js.html)

v-- 13.11.2014 18:20

Практика расширения прототипов (ianis.js)
 
Здравствуйте.

Сначала история - когда я начал работать с JavaScript я начал постепенно копировать набор функций с проект на проект (как, я уверен, часто случается). Поэтому я решил создать библиотеку а-ла underscore.js, но вместо того чтобы использовать объект с мистическим названием я решил добавлять методы к прототипам базовых типов (Object, Array, Function....) - благодарение Object.defineProperty это можно делать без нарушения for..in (и for..of) циклов.

Проблема в том насколько удобно это будет другим? На данный момент эта библиотека нравится всем, с кем я работал по js проектам. В то же время изменять базовые типы языка может привести к неясности - откуда взялся данный метод и почему его нет в MDB.

Мой вопрос - заслуживает ли продолжение эта моя хрень или лучше писать underscore mix-ins?

URL библиотеки: https://github.com/v--/ianis.js

kobezzza 13.11.2014 18:32

mootools.js
prototype.js

nerv_ 23.11.2014 16:32

уже все написано

http://sugarjs.com/api
https://lodash.com/docs

v-- 29.11.2014 18:27

@nerv_:
Про sugarjs впервые слышу. Почти то же самое, что и мое, но лучше (хотя некоторых методов мне там не хватает). Спасибо, что просветил.

MallSerg 29.11.2014 18:47

имхо этим почти никто не пользуется и это не с проста =)

v-- 30.11.2014 01:33

@MallSerg:
Причина для создания ianis.js лишь одна:
Цитата:

когда я начал работать с JavaScript я начал постепенно копировать набор функций с проект на проект
Не знаю что ты имел в виду со своим ответом (хотя и согласен, что половина методов - хрень), но подавать метод так:

func(object.binded('method').partial(parameter));


мне легче, чем так:
func(function() {
  args = Array.prototype.slice.call(arguments);
  args.unshift(parameter);
  object.method.apply(object, args);
});


Кроме того, String#prototype#basename() и String#prototype#dirname() делают ту же работу, что и в GNU Coreutils.

Может это и стоит поставить в README, но вопрос был о другом (хотя может и не в правильной секции).

EDIT: Еще
[true, true, true].isMonotone(); // true
[[], [], []].isTypeMonotone(); // true
[1, 2, '3'].isTypeMonotone(); // false


В README подробно описаны какие методы что делают. Так что - не совсем безполезная дрянь.

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


Часовой пояс GMT +3, время: 00:10.