2016-12-08 2 views
0

Как узнать, что делает первый параметр в $ .extend? Это говорит о глубокой копии, но что это значит?

Я стараюсь, но она не показывает отличаться в результате

http://jsfiddle.net/rvbrw0p9/

$(document).ready(function() { 
var object1 = { a: 1, b: 2, c: 3 }; 
var object2 = { a: 'a', b: 2, c: 'c'}; 

var r = $.extend(object1 , object2); 
var r2 = $.extend(true, object1 , object2); 

console.log(r); 
console.log(r2); 
}); 

ответ

1

Технически ничем не отличается от г и г2.

Но, пожалуйста, обратите внимание на поведениеhttp://api.jquery.com/jQuery.extend/

Примечание 1 jQuery.extend (цель [, object1] [, objectN])

var r = $.extend(object1 , object2); 
// mean now we merge object2 into object1 so object1={ a: 'a', b: 2, c: 'c'} 
console.log(object1) // return { a: 'a', b: 2, c: 'c'} 
console.log(r) // return { a: 'a', b: 2, c: 'c'} 
$ .extend()

Примечание 2 jQuery.extend ([глубоко], цель, object1 [, objectN])

var objA = { k: 1, b: 2}; 
var objB = { k: 2, b: 'b', z:9}; 
var ret = $.extend(true, objA, objB); // when true as first parameter = merge recursive (deep copy) 
console.log(objA); // return { k: 2, b: 'b', z:9} 
console.log(ret); // return { k: 2, b: 'b', z:9} 

Примечание 3 Что произойдет, если мы передаем Ложными или {} в качестве первых пар ,

var objA = { k: 1, b: 2}; 
var objB = { k: 2, b: 'b', z:9}; 
var ret = $.extend(false, objA, objB); 
console.log(objA) // return { k: 1, b: 2} 
console.log(ret) // return { k: 2, b: 'b', z:9} 

Из приведенного выше примера мы можем увидеть Истинных глубокую копию обновит цели значение соответственно другим значением objectN

+0

так неглубоко копия не копирует вложенный объект или внутренних массивов в то время как глубокая копия делает, это все? – Devalor

Смежные вопросы