Для плагина jQuery зачем добавлять определение объекта в $ вместо globaly? - PullRequest
2 голосов
/ 27 августа 2011

Я изучал плагин jQuery. Плагин расширяет $.fn, как и следовало ожидать. Однако плагин также определяет объект для его использования. Объект определен так ...

$.MyObj = function() {

}

$.MyObj.prototype.foo = "green";

Почему бы вам сделать определение объекта свойством $? Почему бы просто не определить объект глобально?

MyObj = function() {

}

MyObj.prototype.foo = "green";

Есть ли какие-либо преимущества в том, чтобы сделать определение объекта свойством $?

Ответы [ 2 ]

1 голос
/ 27 августа 2011

General Plugin Convention

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

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

Пример: если на страницу добавляется плагин foo.js, вы можете ожидать, что он добавит

window.foo = {};
//or
window.foo = function(){};

Было бы глупо для любого разработчика использовать два сценария /path/to/foo.js и /different/path/to/foo.js и ожидать, что они будут хорошо работать вместе, поскольку они, вероятно, совместно используют одно пространство имен.

Однако для плагинов jQuery для плагинов требуется jQuery. Таким образом, нет причин загрязнять глобальное пространство имен, если вы можете гарантировать существование объекта jQuery.

Поскольку (по определению) для плагинов jQuery требуется jQuery, рекомендуемое соглашение об именах для плагинов: jQuery.[plugin name].js. Как и обычные плагины, для разработчика было бы глупо использовать два скрипта /path/to/jQuery.foo.js и /different/path/to/jQuery.foo.js и ожидать, что они будут хорошо работать вместе.

jQuery нюансы

Некоторые плагины jQuery расширяют $.fn[pluginName], другие являются дополнительными функциями (например, $.each, $.ajax и $.extend), а некоторые расширяют возможности селектора jQuery. Каждому из них часто требуются глобально постоянные данные, будь то значения по умолчанию, служебные функции или что у вас есть.

Плагин, создающий $.fn.foo, может также хотеть, чтобы $.foo.defaultSettings был постоянным и расширяемым.

Что касается преимуществ, добавление плагинов jQuery к объекту jQuery уменьшает глобальное загрязнение, и я не знаю никого, кто бы любил загрязнение.

0 голосов
/ 27 августа 2011

Многие библиотеки javascript, такие как jquery, стараются не «загрязнять» глобальное пространство имен. Причина в том, что если несколько библиотек или библиотека и сама веб-страница используют одно и то же имя глобальной переменной, то одна может сломать другую. Для чего-то столь же широко распространенного, как jquery, это может привести к конфликту. Даже для плагина это было бы плохой практикой.

На самом деле, та же проблема может возникнуть внутри самого объекта jquery, поэтому плагин действительно не должен даже устанавливать $ .MyObj, (что, если другой плагин будет делать то же самое?), Но я полагаю, что автор подумал, что это менее плохо .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...