jQuery как продлить против угловой продлить


в чем разница между этими двумя расширяет функции?

  angular.extend(a,b);
  $.extend(a,b);

в то время как jquery.расширение хорошо документировано угловым.расширить не хватает деталей и комментарии там не дают ответов. (https://docs.angularjs.org/api/ng/function/angular.extend).

не торцевая.расширить и обеспечить глубокую копию?

4 60

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: Я вижу только одно существенное различие, которое заключается в том, что в jQuery extend позволяет указать только один объект, в этом случае - это цель.

общие характеристики:

  • это мелкая копия. Так что если 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);