2013-06-27 3 views
0

Я новичок в jQuery, и я хочу узнать о функции $ .extend() в jQuery.

Может кто-нибудь объяснить разницу между следующими утверждениями?

$.extend(true,ob1,ob2); 

$.extend(true,{},ob1,ob2); 

$.extend(true,ob1,{},ob2); 

$.extend(true,ob1,ob2,{}); 

Спасибо,

Anand

+0

посмотреть здесь http://api.jquery.com/jQuery.extend/ – PSR

ответ

3

Это лучше всего объяснить с образцом

var firstObject = { 
    "hello": "jonkers", 
}; 
var secondObject = { 
    "stradivarius": "bonkers" 
}; 
console.log(firstObject); 
>> Object {hello: "jonkers"} 
$.extend(firstObject, secondObject); 
console.log(firstObject); 
>> Object {hello: "jonkers", stradivarius: "bonkers"} 

Но что подразумевает true части? Это логическое значение, которое сообщает функции $.extend, что должно быть выполнено глубокое копирование .

Глубокая копия, вы говорите!

Существует два разных типа «копирования», когда речь идет о объектах, которые применяются ко многим языкам, а не только к JavaScript, и это shallow и deep. Мелкая копия - это когда вы просто берете ссылки на этот объект (и все, что содержит), и делаете дубликат, ведущий к значениям, измененным в copy_object, отражается в original_object. Глубокая копия - настоящий бренд, шлепающий новый объект, который вы можете манипулировать тремя способами в воскресенье, не затрагивая original_object.

Последний пример, о котором вы хотите узнать, - это тот же самый вызов, за исключением того, что в первый объект будет добавлено еще несколько объектов. Поэтому вызов апи будет

$.extend(true, firstObject, secondObject, third, fourth, n-objects); 

Чтение больше об этом можно сделать

http://api.jquery.com/jQuery.extend/

http://blog.imaginea.com/deep-copy-in-javascript/

+0

Спасибо за ваш быстрый ответ – Anandaraj

2

Давайте начнем с определения функции extend:

When two or more object arguments are supplied to $ .extend() , properties from all of the objects are added to the target object. Arguments that are null or undefined are ignored.

Теперь позволяет видеть ваши примеры кодов:

1. $.extend(true,ob1,ob2); 

Цель ob1, это будет добавить аргументы ob2 в параметры.

2. $.extend(true,{},ob1,ob2); 

Цель - новый объект (определенный с {}). Этот новый объект будет иметь аргументы от обоих объектов (ob1 и ob2).

3. $.extend(true,ob1,{},ob2); 

Целью является ob1, это добавит аргументы из нового объекта (это не делает Sence) и объект ob2. Работает ли он с новым параметром объекта?

4. $.extend(true,ob1,ob2,{}); 

Целью является ob1, это добавит аргументы из объекта OB2 и от нового объекта (он не делает Sence либо). Работает ли он с новым параметром объекта?

+0

Спасибо за объяснение – Anandaraj