2014-01-18 1 views
2

я рассматривал исходный запрос кода, когда я наткнулся на это:jQuery.extend() и jQuery.fn.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

Они не то же самое, прочитайте документацию. – adeneo

+2

$ .fn.extend = Объединить содержимое объекта с прототипом jQuery, чтобы предоставить новые методы экземпляра jQuery. – adeneo

+0

jQuery.extend = Объединить содержимое двух или более объектов вместе в первый объект. – adeneo

ответ

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

Основное различие здесь:

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

this будет отличаться в зависимости от того, был ли называется $.extend или $.fn.extend.

+0

Вы даже могли бы называть '$ .extend()' только одним аргумент ... – Bergi