Создание пользовательской функции jQuery без предварительного выбора

Я знаю, что я могу создавать пользовательские плагины jQuery с помощью конструктора $.fn.myFunction и вызова пользовательской функции в JavaScript как $('selector').myFunction().

Однако для проекта, над которым я сейчас работаю, мне нужно определить функцию, которая не требует, чтобы селектор работал. Это фактически для плагина MessageBox, который будет действовать аналогично С# MessageBox. Таким образом, я идеально хотел бы создать функцию как MessageBox, а затем вызвать ее следующим образом:

var myMessage = $.MessageBox();, а затем, в свою очередь, myMessage.Show();

Обратите внимание на отсутствие селекторных балансиров в ссылке jQuery в начале вызова функции.

Любые советы по наилучшей практике для этого будут с благодарностью приняты.

Ответы

Ответ 1

Это должно работать:

jQuery.MessageBox = function() {
  var show = function() {
    // something...
  }
  var hide = function() {
    // something...
  }
  return {
    show: show,
    hide: hide
  }
}

Ответ 2

relipse имеет хорошую точку - поскольку вы загромождаете основное пространство имен. Решение, если у вас больше объектов, чем просто, например. MessageBox должен создать ваше собственное пространство имен следующим образом:

jQuery.myLib = {
  MessageBox: function() {
    var show = function() {
      // something...
    }
    var hide = function() {
      // something...
    }
    return {
      show: show,
      hide: hide
    }
  }
}

Это означает, что вы занимаете одно место в основном пространстве имен (имя вашей библиотеки, в данном случае myLib). Вы бы назвали это следующим образом:

jQuery.myLib.MessageBox.show()

Ответ 3

(function ($) {
    $.MessageBox = function () {
        var show = function () {
            // something...
        }
        var hide = function () {
            // something...
        }
        return {
            show: show,
            hide: hide
        }
    }
})(Jquery);

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