jquery étendre vs angulaire étendre
Quelle est la différence entre ces deux étendre les fonctions?
angular.extend(a,b);
$.extend(a,b);
Tandis que le jquery.étendre est bien documenté angulaire.étendre manque de détails et les commentaires n'offrent pas de réponses. (https://docs.angularjs.org/api/ng/function/angular.extend).
Ne angulaire.étendre également fournir copie en profondeur?
- Il affirme, en
by copying all of the properties
, et je suppose que l'utilisation du motall
signifieeverything
, qui est synonyme dedeep copy
dans le JS monde. - Je doute fort que c'est une copie en profondeur. Si une propriété (par exemple,
p
) se réfère à un objet, je parie que vous dollars pour beignes que, après l'appel, les deuxsrc.p
etdst.p
font référence au même objet. - Trompeuse angulaire de la documentation est.
Vous devez vous connecter pour publier un commentaire.
angular.extend
etjQuery.extend
sont très similaire. Ils font tous les deux peu profonde propriété de la copie à partir d'un ou plusieurs objets de la source à la destination de l'objet. Ainsi, par exemple:angulaire.copie
fournit un profonde copie:Pour en revenir à
extend
: je ne vois qu'une différence importante, qui est celle de jQueryextend
vous permet de spécifier qu'un seul objet, auquel casjQuery
lui-même est la cible.De choses en commun:
C'est une copie. Donc, si
src
a une propriétép
qui se réfère à un objet,dst
obtiendrez une propriétép
qui fait référence à la même objet (pas une copie de l'objet).Ils reviennent tous les deux l'objet de destination.
Ils à la fois le soutien de plusieurs objets de la source.
Ils ne les multiples objets de source de afin, et donc, la dernière source de l'objet "gagner" dans le cas où plus d'un objet source a le même nom de propriété.
Page de Test: Vivre Copie | La Source En Direct
true
comme premier argument pour faire une copie en profondeur. Voir ici: api.jquery.com/jQuery.extend/...angular.extend()
de ne pas copier les getters et setters pour vous. Voir github.com/angular/angular.js/issues/8573Il y a une différence subtile entre les deux qui n'était pas mentionné dans les réponses précédentes.
de jQuery .extend() vous permet de vous conditionnellement ajouter une clé,valeur couples, seulement si la valeur est définie. Donc en jQuery:
$.extend({}, {'a': x ? x : undefined});
sera de retour{}
en casx
est pas défini.Angulaire de l' .extend() cependant, ce:
angular.extend({}, {'a': x ? x : undefined});
sera de retour{'a': undefined}
, même six
est pas défini. Donc, la clé sera là, n'importe quoi.Cela pourrait être une bonne ou une mauvaise chose, selon ce que vous avez besoin. De toute façon c'est une différence dans comportement entre les deux bibliothèques.
La 1.0.7 angularjs construire des états que de l'étendre & méthodes de copie n'est plus de la copie sur le angularjs interne $$hashKey valeurs.
Voir les notes de version de @ https://github.com/angular/angular.js/blob/master/CHANGELOG.md
angulaire.copier/angulaire.étendre: ne pas copier $$hashKey en copier/étendre les fonctions. (6d0b325f, #1875)
Un test rapide de l'angle.copie en Chomre outils de dev méthode montre qu'elle fait une copie en profondeur.
angulaire.étendre sur l'autre main effectue une copie superficielle.
extend
n'est pas, de toute façon, je ne regarde pascopy
.copy
n',extend
ne fonctionne pas: jsbin.com/eketan/2 Mais la question est à proposextend
, pascopy
..extend() dans AngularJS fonctionne de façon similaire à du jQuery .extend()
http://jsfiddle.net/Troop4Christ/sR3Nj/