jQuery как продлить против угловой продлить
в чем разница между этими двумя расширяет функции?
angular.extend(a,b);
$.extend(a,b);
в то время как jquery.расширение хорошо документировано угловым.расширить не хватает деталей и комментарии там не дают ответов. (https://docs.angularjs.org/api/ng/function/angular.extend).
не торцевая.расширить и обеспечить глубокую копию?
4 ответа:
angular.extend
иjQuery.extend
are очень похожие. Они оба делают мелкий свойство копировать из одного или нескольких исходных объектов в целевой объект. Так, например:var src = {foo: "bar", baz: {}}; var dst = {}; whatever.extend(dst, src); console.log(dst.foo); // "bar" console.log(dst.baz === src.baz); // "true", it's a shallow copy, both // point to same object
angular.copy
предоставляет глубокий копия:var src = {foo: "bar", baz: {}}; var dst = angular.copy(src); console.log(dst.baz === src.baz); // "false", it's a deep copy, they point // to different objects.
возвращаясь к
extend
: Я вижу только одно существенное различие, которое заключается в том, что в jQueryextend
позволяет указать только один объект, в этом случае - это цель.общие характеристики:
это мелкая копия. Так что если
src
свойствоp
, что относится к объекту,dst
получите собственностьp
что относится к то же самое
есть одно тонкое различие между ними, которое не было упомянуто в предыдущих ответах.
jQuery .extend () позволяет условно добавить ключ,значение пары, только если значение. Так что в jQuery это:
$.extend({}, {'a': x ? x : undefined});
вернутся{}
в случаеx
неопределено.в угловой .продлить (правда), это:
angular.extend({}, {'a': x ? x : undefined});
вернутся{'a': undefined}
, даже еслиx
неопределено. Так что ключ будет там, несмотря ни на что.этот может быть хорошим или плохим в зависимости от того, что вам нужно. В любом случае это разница в поведение между двумя библиотеками.
в сборке 1.0.7 angularjs указано, что методы extend & copy больше не копируют внутренние значения $$hashKey angularjs.
см. примечания к выпуску @ https://github.com/angular/angular.js/blob/master/CHANGELOG.md
угловое.копия / угловая.расширение: не копируйте $$hashKey в функции копирования / расширения. (6d0b325f, #1875)
быстрый тест углового.скопировать в способ Chomre средства разработки показывает, что он делает глубокий копировать.
x = {p: 3, y: {x: 5}} Object {p: 3, y: Object} x Object {p: 3, y: Object} z = angular.copy(x); Object {p: 3, y: Object} z Object {p: 3, y: Object} x Object {p: 3, y: Object} z.y.x = 1000 1000 x Object {p: 3, y: Object} p: 3 y: Object x: 5 __proto__: Object __proto__: Object z Object {p: 3, y: Object} p: 3 y: Object x: 1000 __proto__: Object __proto__: Object
угловое.расширение с другой стороны делает мелкую копию.
.extend () в AngularJS работает аналогично jQuery .extend ()
http://jsfiddle.net/Troop4Christ/sR3Nj/
var o1 = { a: 1, b: 2, c: { d:3, e:4 } }, o2 = { b: { f:{ g:5 } } }; console.log(angular.extend({}, o1, o2)); console.log(o1); console.log(o2);