1

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

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

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

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

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

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

谢谢

4

1 回答 1

6

通常你定义一个函数,比如plugin()

$.fn.plugin = ...

正如这里所讨论的,$.fn实际上只是一个捷径jQuery.prototype。当您将方法附加到构造函数的原型时,JavaScript 会自动将其附加到使用关键字从该构造函数创建的所有实例上new,当您编写类似$('li'). 请参阅http://javascriptweblog.wordpress.com/2010/06/07/understanding-javascript-prototypes/

所以这里有一个简单的例子来创建一个名为kQueryCoffeeScript 的库,它允许你 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 KK函数内调用,您会得到一个无限循环(这将解决一个错误)。

于 2011-05-08T19:07:01.807 回答