имитация плагинов jQuery с простым javascript или coffeescript - PullRequest
1 голос
/ 08 мая 2011

Без использования jQuery я бы хотел узнать, как имитировать плагин jQuery

Например, возможно, $ ('div.x'). Plugin () прикрепляет щелчок к элементам div, увеличивает его и отображает внутреннее значение.

Где jQuery хранит объект с внутренней переменной?

Был ли объект где-то явно создан и связан с каждым узлом?

Я заблудился, пытаясь объяснить себе, почему в основном списке приложений нет явного создания объекта .... должно быть как-то внутри плагина?

(PS: меня меньше волнует сторона механизма запросов ... только сторона плагина:)

спасибо

1 Ответ

6 голосов
/ 08 мая 2011

Обычно вы определяете функцию типа 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, вы получили бы бесконечный цикл (который разрешил бы ошибку).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...