不使用jQuery,我想知道如何模仿jQuery插件
例如,也许$('div.x')。plugin()将一个onclick附加到div,并递增并显示内部值。
jQuery在哪里实际存储具有内部变量的对象?
是否在某处显式创建了一个对象并与每个节点相关联?
我迷失了,试图向自己解释为什么在主应用程序列表中没有明确的对象创建....必须以某种方式在插件中发生?
(PS:我不太关心查询引擎方面......只是插件方面:)。
感谢
答案 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
。请注意,单独的kQuery
和K
函数的原因是,如果您从new K
函数中调用K
,则会获得无限循环(这将解决错误)。