使用普通的javascript或coffeescript模仿jQuery插件

时间:2011-05-08 15:51:22

标签: javascript coffeescript

不使用jQuery,我想知道如何模仿jQuery插件

例如,也许$('div.x')。plugin()将一个onclick附加到div,并递增并显示内部值。

jQuery在哪里实际存储具有内部变量的对象?

是否在某处显式创建了一个对象并与每个节点相关联?

我迷失了,试图向自己解释为什么在主应用程序列表中没有明确的对象创建....必须以某种方式在插件中发生?

(PS:我不太关心查询引擎方面......只是插件方面:)。

感谢

1 个答案:

答案 0 :(得分:6)

通常,您可以通过编写

来定义类似plugin()的函数
$.fn.plugin = ...

正如here所述,$.fn实际上只是jQuery.prototype的捷径。当您将方法附加到构造函数的原型时,JavaScript会自动将它附加到使用new关键字从该构造函数创建的所有实例,当您编写$('li')之类的内容时,jQuery会在内部执行此操作。请参阅http://javascriptweblog.wordpress.com/2010/06/07/understanding-javascript-prototypes/

所以这是一个在CoffeeScript中创建名为kQuery的库的简单示例,它允许您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。请注意,单独的kQueryK函数的原因是,如果您从new K函数中调用K,则会获得无限循环(这将解决错误)。