jQuery.extend()和jQuery.fn.extend()是一样的......对吗?

时间:2014-01-18 14:45:18

标签: javascript jquery extend

当我遇到这个时,我正在检查查询源代码:

3730     |  jQuery.extend({
3731-3775|      //code
3776     |  });

然后就在那之后,我发现了这个:

3778| jQuery.fn.extend({
----|    //code
----| })

这两个应该是相同的,因为在296返回声明扩展函数的地方,我发现了这个:

296| jQuery.extend = jQuery.fn.extend = function() {

但是既然它们是相同的,为什么jQuery团队会突然从使用jQuery.extend()切换到突然使用jQuery.fn.extend()

2 个答案:

答案 0 :(得分:3)

$.extend只是扩展了一个对象

var obj1 = {'name' : 'Progo'};
var obj2 = {'value' : 'stack overflow'};

$.extend(obj1, obj2);

// obj1 is now {'name' : 'Progo', 'value' : 'stack overflow'}

FIDDLE

jQuery.fn.extend扩展了jQuery原型

jQuery.fn.extend({
  turn_red: function() {
    return this.each(function() {
      this.style.color = 'red'
    });
  }
});

// gives you

$('elements').turn_red(); // sets color to red

FIDDLE

答案 1 :(得分:1)

关键区别在于:

// extend jQuery itself if only one argument is passed
if ( length === i ) {
    target = this;
    --i;
}

this会有所不同,具体取决于是$.extend还是$.fn.extend