在jQuery插件中,返回'this'或'$(this)'?

时间:2011-03-26 18:55:58

标签: jquery jquery-plugins

创建jQuery插件时,应该在$.fn函数中返回什么?是return this还是return $(this)?我在搜索时遇到的一些网站使用前者,而其他网站使用后者:

有什么区别,首选是什么?

2 个答案:

答案 0 :(得分:6)

直接位于$.fn(jQuery构造函数的原型)上的函数内部,this指的是函数运行的jQuery集合实例。返回this是正确的。将其包含在$()中只会给代码增加不必要的重量。

请参阅Context section of jQuery plugin authoring guidelines

答案 1 :(得分:1)

this是调用函数的jQuery对象; $(this)是对象的浅表副本(另一个jQuery对象,指的是相同的DOM元素或原始持有的任何对象)。通常,this应该更好,因为1)创建jQuery对象的副本需要大量的操作,2)您通常不会更改jQuery对象的属性。

现在,如果您更改属性,那么两者的行为会有所不同:

var foo = $('#id');
var bar = $(foo);
foo.baz = 1;
bar.baz; // undefined

在这种情况下,返回$(this)可能更有意义。例如,jQuery自己的add函数在内部执行类似的操作:

var next = $(this);
// add parameter to next
return next;

因此,当您向jQuery对象添加元素时,它不会修改原始文件:

var foo = $('html');
var bar = foo.add('body');
bar.length; // 2
foo.length; // 1