Обычно вы определяете функцию типа plugin()
, записывая
$.fn.plugin = ...
Как обсуждено здесь , $.fn
на самом деле является просто сокращением для jQuery.prototype
.Когда вы присоединяете метод к прототипу конструктора, JavaScript автоматически присоединяет его ко всем экземплярам, созданным из этого конструктора с ключевым словом new
, что jQuery делает внутренне, когда вы пишете что-то вроде $('li')
.См. http://javascriptweblog.wordpress.com/2010/06/07/understanding-javascript-prototypes/.
Итак, вот простой пример создания библиотеки с именем kQuery
в CoffeeScript, которая позволяет 1) создавать именованные экземпляры и 2) добавлять плагины:
instances = {}
kQuery = (name) ->
K = (name) ->
return instances[name] if instances[name]
instances[name] = new kQuery name
K.fn = kQuery.prototype
ЭтоЭто!Теперь, если кто-то напишет
K.fn.plugin = -> console.log 'foo'
K('whatev').plugin()
, он увидит foo
на своей консоли.Обратите внимание, что причина для отдельных функций kQuery
и K
состоит в том, что если бы вы вызвали new K
из функции K
, вы получили бы бесконечный цикл (который разрешил бы ошибку).