Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Смишных картинок тред (https://javascript.ru/forum/offtopic/35821-smishnykh-kartinok-tred.html)

cyber 24.12.2013 03:15

Цитата:

Сообщение от Maxmaxmaximus6
Не принято расширять прототипы элементов

Я это знаю, но всегда не до конца понимал почему? Если моя функция не затрагивает стандартные и по сути это синтаксический сахар..
вот к пример код взятый с https://developer.mozilla.org/en/docs/Web/API/NodeList#Why_can't_I_use_forEach_or_map_on_a_NodeL ist.3F
var arrayMethods = Object.getOwnPropertyNames( Array.prototype );

arrayMethods.forEach( attachArrayMethodsToNodeList );

function attachArrayMethodsToNodeList(methodName)
{
    NodeList.prototype[methodName] = Array.prototype[methodName];
};
 
var divs = document.getElementsByTagName( 'div' );
var firstDiv = divs[ 0 ];

firstDiv.childNodes.forEach(function( divChild ){
  divChild.parentNode.style.color = '#0F0';
});

Maxmaxmaximus6 24.12.2013 03:31

Цитата:

Сообщение от cyber
Я это знаю, но всегда не до конца понимал почему?

Потому что в яваскрипте не существует модулей, а сайты модульные, люди пишут библиотеки и они подключаются на один сайт в рандомных сочетаниях, существует риск что кто-то другой уже использует этот неймспейс и эти названия. К примеру я в своей реализации скрипта уменьшающего картинки мог хранить значение zoom не в замыкании, а в обьектной модели картинки (image.$zoom = true) но я этого не делал по тому что возможно через лет 200 Кантор подключит на свой сайт либу которая использует это свойство у картинок, и мой скрипт перестанет работать. По этому существует соглашение не делать так.

cyber 24.12.2013 03:39

Maxmaxmaximus6, да это я понимаю, твой пример не много не подходит так как Илья Кантор, не знает о твоем скрипте, а при подключение новой либы известно что подлкючена другая либа, хотя с другой стороны, если проект делают разные люди, в общем да, нужно придумать как все удобно вынести в отдельный неймспейс.

Maxmaxmaximus6 24.12.2013 03:42

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

Дело не в том что проэкт делают разные люди и могут напутаться. Дело в том что если ангуляр будет использовать prototype.ololo и jquery будет использовать prototype.ololo. то подключив и то и то у меня сайт не будет работать и я не буду понимать в чем дело. я не обязан знать как устроены ангуляр и jquery и это они должны следить за тем чтобы не было конфликтов.

если ты делаешь проект то ты можешь использовать глобальные переменные и расширять прототипы ТОЛЬКО если ты не подключаешь каких-то левых либ.

Ты еще не понял? человек который подключает либу НЕ ЗНАЕТ как она внутри устроена. А что если ангуляр использует одно свойство и Jquery?? Что ему теперь не подключать их ВМЕСТЕ??

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

cyber 24.12.2013 03:50

Maxmaxmaximus6, это ты не понял, так я не уточнил ключевой момент:))) Я это и так все знаю, просто сижу рассуждаю насчет как собрать все в либу для своих мини проектов, у меня щас просто все через прототип.

Maxmaxmaximus6 24.12.2013 03:54

Ты задаешь вопрос почему так нельзя делать, ты сказал я знаю что так низя но не понял почему, я обьяснил тебе, теперь ты понял)?

cyber 24.12.2013 03:56

Цитата:

Сообщение от Maxmaxmaximus6
Ты задаешь вопрос почему так нельзя делать, ты сказал я знаю что так низя но не понял почему, я обьяснил тебе, теперь ты понял)?

:) По сути вопрос был реторическим, у меня бывает такое, что сначала спрашиваю что вопрос бессмысленный так как я и так знаю на него ответ)
Но всеравно спасибо:)

Maxmaxmaximus6 24.12.2013 04:08

Окей тогда в чем вопрос)? Ну ты что то там делашеь и хочешь обьединить как то там и спрашиваешь как лучше сделать?

cyber 24.12.2013 04:20

Цитата:

Сообщение от Maxmaxmaximus6
Окей тогда в чем вопрос)? Ну ты что то там делашеь и хочешь обьединить как то там и спрашиваешь как лучше сделать?

По сути да, из вариантов

document.body.$.parent(); // добавить неймспейс прям в прототипы


или

$.parent(document.body);


или начинать все имена с $
document.body.$parent();



либо на прототипах оставить, как MooTools. (больше к этому склоняюсь).

Maxmaxmaximus6 24.12.2013 04:27

а что ты пишешь? либу которая будет предоставлять api для css анимаций яваскрипту? а зачем яваскрипту такой api?
ведь анимации это внешность, а внешностью должен заниматься css.


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