Доступ к функции в области jQuery

#javascript #jquery

#javascript #jquery

Вопрос:

Я хочу создать функцию вне области jQuery:

 (function($) {
  function MyObject() {
    console.log('foo');
  };
}(jQuery));
var $my_object = new MyObject();
 

Но функция MyObject недоступна :

Ошибка ссылки: MyObject не определен

Однако, если я создаю свою функцию в области, она работает:

 (function($) {
  function MyObject() {
    console.log('foo');
  };
  var $my_object = new MyObject();    
}(jQuery));
 

foo

Как получить доступ к MyObject за пределами области?

Комментарии:

1. window.MyObject = function()... ?

2. Это невозможно сделать, если вы не определяете функцию в глобальной области видимости (например, как плагин jQuery).

3. jsfiddle.net/LVPyL

4. технически это возможно с помощью этого шаблона: jsfiddle.net/LVPyL/1

Ответ №1:

Я бы, вероятно, не рекомендовал это, но в принципе вы можете делать то, что хотите, возвращая функции как часть объекта и присваивая IIFE переменной, подобной этой

 var library = (function ($) {

    var exports = {};
    var private = 'see you cant get this';
    var MyObject = exports.MyObject = function (_in) {
        console.log(_in);
    };
    var another_func = exports.sum = function (a, b) {
        console.log(a   b);
    };


    return exports;
}(jQuery));



library.MyObject('foobar'); // "foobar"
library.sum(3, 5);  // 8
console.log(private);  // Uncaught ReferenceError: private is not defined
 

Ответ №2:

Хотя я не знаю, почему вы хотите это сделать.. Может быть, это помогает

 // Define Class globally
// window.MyObject also works
var MyObject = (function($) {
// Passes jQuery in
  return function () {
    console.log('foo');
  };

}(jQuery));
var $my_object = new MyObject();