24.12.2013, 03:15
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Сообщение от 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';
});
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
Последний раз редактировалось cyber, 24.12.2013 в 03:19.
|
|
24.12.2013, 03:31
|
Профессор
|
|
Регистрация: 19.12.2013
Сообщений: 180
|
|
Сообщение от cyber
|
Я это знаю, но всегда не до конца понимал почему?
|
Потому что в яваскрипте не существует модулей, а сайты модульные, люди пишут библиотеки и они подключаются на один сайт в рандомных сочетаниях, существует риск что кто-то другой уже использует этот неймспейс и эти названия. К примеру я в своей реализации скрипта уменьшающего картинки мог хранить значение zoom не в замыкании, а в обьектной модели картинки (image.$zoom = true) но я этого не делал по тому что возможно через лет 200 Кантор подключит на свой сайт либу которая использует это свойство у картинок, и мой скрипт перестанет работать. По этому существует соглашение не делать так.
|
|
24.12.2013, 03:39
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Maxmaxmaximus6, да это я понимаю, твой пример не много не подходит так как Илья Кантор, не знает о твоем скрипте, а при подключение новой либы известно что подлкючена другая либа, хотя с другой стороны, если проект делают разные люди, в общем да, нужно придумать как все удобно вынести в отдельный неймспейс.
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
24.12.2013, 03:42
|
Профессор
|
|
Регистрация: 19.12.2013
Сообщений: 180
|
|
Ты не понял, Вася пупкин может подключить либу и не зная как она устроена и какие свойства она использует.
Дело не в том что проэкт делают разные люди и могут напутаться. Дело в том что если ангуляр будет использовать prototype.ololo и jquery будет использовать prototype.ololo. то подключив и то и то у меня сайт не будет работать и я не буду понимать в чем дело. я не обязан знать как устроены ангуляр и jquery и это они должны следить за тем чтобы не было конфликтов.
если ты делаешь проект то ты можешь использовать глобальные переменные и расширять прототипы ТОЛЬКО если ты не подключаешь каких-то левых либ.
Ты еще не понял? человек который подключает либу НЕ ЗНАЕТ как она внутри устроена. А что если ангуляр использует одно свойство и Jquery?? Что ему теперь не подключать их ВМЕСТЕ??
А что если ты в своем проекте используешь расширение прототипов и у тебя подключен ангуляр и он тоже использует расширение прототипов, ну вот раньше не использовал а завтра начнет, то твой сайт поломается, ты студия и ты сделал сайт и через год он перестает работать. норма?
Последний раз редактировалось Maxmaxmaximus6, 24.12.2013 в 03:46.
|
|
24.12.2013, 03:50
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Maxmaxmaximus6, это ты не понял, так я не уточнил ключевой момент )) Я это и так все знаю, просто сижу рассуждаю насчет как собрать все в либу для своих мини проектов, у меня щас просто все через прототип.
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
24.12.2013, 03:54
|
Профессор
|
|
Регистрация: 19.12.2013
Сообщений: 180
|
|
Ты задаешь вопрос почему так нельзя делать, ты сказал я знаю что так низя но не понял почему, я обьяснил тебе, теперь ты понял)?
|
|
24.12.2013, 03:56
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Сообщение от Maxmaxmaximus6
|
Ты задаешь вопрос почему так нельзя делать, ты сказал я знаю что так низя но не понял почему, я обьяснил тебе, теперь ты понял)?
|
По сути вопрос был реторическим, у меня бывает такое, что сначала спрашиваю что вопрос бессмысленный так как я и так знаю на него ответ)
Но всеравно спасибо
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
24.12.2013, 04:08
|
Профессор
|
|
Регистрация: 19.12.2013
Сообщений: 180
|
|
Окей тогда в чем вопрос)? Ну ты что то там делашеь и хочешь обьединить как то там и спрашиваешь как лучше сделать?
|
|
24.12.2013, 04:20
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Сообщение от Maxmaxmaximus6
|
Окей тогда в чем вопрос)? Ну ты что то там делашеь и хочешь обьединить как то там и спрашиваешь как лучше сделать?
|
По сути да, из вариантов
document.body.$.parent(); // добавить неймспейс прям в прототипы
или
$.parent(document.body);
или начинать все имена с $
document.body.$parent();
либо на прототипах оставить, как MooTools. (больше к этому склоняюсь).
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
24.12.2013, 04:27
|
Профессор
|
|
Регистрация: 19.12.2013
Сообщений: 180
|
|
а что ты пишешь? либу которая будет предоставлять api для css анимаций яваскрипту? а зачем яваскрипту такой api?
ведь анимации это внешность, а внешностью должен заниматься css.
|
|
|
|