Javascript jQuery插件编写

Javascript jQuery插件编写,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,你知道为什么这个基本例子不起作用吗 您需要一个选择器: $(document).testPlugin(); $(window).testPlugin(); 演示: 因为您将插件添加到了fn名称空间,而不是$名称空间。因此,$().testPlugin()可以工作,但$.testPlugin()不能 如果要污染$命名空间,可以执行以下操作: (function( $ ){ $.testPlugin = function( options ) { alert('hi')

你知道为什么这个基本例子不起作用吗

您需要一个选择器:

$(document).testPlugin();
$(window).testPlugin();
演示:
因为您将插件添加到了
fn
名称空间,而不是
$
名称空间。因此,
$().testPlugin()
可以工作,但
$.testPlugin()
不能

如果要污染
$
命名空间,可以执行以下操作:

(function( $ ){

  $.testPlugin = function( options ) {  
        alert('hi');
  };
})( jQuery );

$.testPlugin();

我遵循的经验法则是:当它与DOM无关(如ajax)时使用
$。
,当它对用选择器抓取的元素(如DOM/XML元素)进行操作时使用
$.fn.

@Chad,说得好+1。我也很喜欢阿拉丁。@Chad+1。优秀、清晰的解释如果我的插件不是在DOM上运行,而是在对象上运行,那么使用
$
名称空间是最佳实践吗?让我们说<编码>num=5$.square(num)@jon在这种情况下,我会做
$.square
,因为jQuery包装的
Number
不是很有用……但是如果它像对象
{}
或数组
[]
然后我可以使用
$.fn.
因为许多jQuery函数对这些类型都很有用,我可能会将其包装在引擎盖下。非常感谢。如果我确实有一个对象,并且函数更复杂,该怎么办。说
data={numbers:[1,2,3,4,5],otherstuff:[]}
我想做这样的链接
$(data).process().filterPrimeNumbers().sortBy('desc')?甚至<代码>x=$(数据).process();x、 sortBy(“asc”)
(function( $ ){

  $.testPlugin = function( options ) {  
        alert('hi');
  };
})( jQuery );

$.testPlugin();