0

Так что я не могу найти верный ответ на этот, только неопределенные примеры нескольких вариантов, где используются подобные объявления плагина/метода. Я знаю, что, говоря

$.fn.myPlugin 

я определяю общедоступный метод плагин, который может быть выполнен на любом допустимом объекте JQuery, где п обозначает прототип. Мой вопрос, то, определив метод, либо внутри моего главного плагина, как так

$.fn.myPlugin.methodName 

или вне моего плагина, как так

$.something.methodName //where 'something' is in place of 'fn' 

это влияет на это время государственно-частное/метод? и если каждый из них является другим типом декларации, в чем разница.

Задняя часть вопроса, почему я хотел бы знать, чтобы дать некоторый контекст ситуации, заключается в том, что я хочу определить один основной плагин, который можно вызвать и запустить нормально, однако, если конечный пользователь хочет переопределить какой-либо метод Я позволил быть публичным, тогда они могут это сделать. Если у меня есть какие-то методы, которые я не хочу, чтобы пользователь переопределял, но вместо этого предоставлял обратные вызовы, чтобы они могли подключиться к нему, я хочу сделать этот метод закрытым.

+0

Если вы устанавливаете что-нибудь на '$ .whatever', то это публика ... –

+0

так бы я тогда сделать' $ .fn.myPlugin.privateMethod' объявить частный метод для MyPlugin? – Turk

+0

Нет. Вы не можете создавать частные методы в общедоступной области. Посмотрите на ответ, предоставленный @NiettheDarkAbsol ниже, чтобы посмотреть, как это сделать. – Archer

ответ

2

Все, что установлено на $.whatever, будет общедоступным и, следовательно, может быть изменено другими разработчиками.

Если вы хотите использовать частные методы, вы должны создать закрытие.

(function() { 
    function init(jqObj) { ... } // do magic here 
    $.fn.myPlugin = function() { init(this); } // avoid exposing core method 
    $.fn.myPlugin.publicMethod = function() { ... } 
    function privateMethod() { ... } 
})(); 
+0

ahhh хорошо, это имеет смысл. У меня есть закрытие, определяемое через '(function ($) {} (jQuery));' Теперь я вижу, что частные методы - это только локально ограниченные функции. Это то, что я упустил, однако, вы используете 'function (init)' как частную функцию основного плагина, чтобы не допустить, чтобы кто-либо писал сам плагин? – Turk

 Смежные вопросы

  • Нет связанных вопросов^_^