Ответ 1
Я бы использовал первый вариант, потому что:
У него нет никаких отрицательных побочных эффектов.
Что вы ошибаетесь. Если вы работаете с разными библиотеками, вы рискуете переписать кого-то elses someFunc(), возможно, нарушив все, что они пытались сделать для вас. Более безопасным способом было бы закрыть закрытие вашего кода.
(function(){
$.fn.myplugin = function () {
var somevar = this;
someFunc(somevar);
};
function someFunc() {/*doSomethin'*/};
/* Do whatever other things you need someFunc/myplugin for */
})();
Таким образом, ваш someFunc защищен от глобального пространства имен.
В качестве альтернативы вы можете попытаться разоблачить метод объекта во внешнем мире. Возьмите следующий пример:
$.fn.dog = function () {
this.bark = function() {alert("Woof");};
return this;
};
var $max = new $('#myDogMax').dog();
$max.bark();
Это сохраняет функцию в контексте вашего объекта, но позволяет получить доступ к ней чисто извне. Хотя это обычно означает, что метод каким-то образом связан с объектом. Было бы мало смысла писать функцию bark() глобально, так как обычно это собаки, которые обычно делают это, а не окна браузера.