Angular Extends and Copy Example

Shows what extend / copy does within angular from an object reference frame

JavaScript

var extendee = {
  'foo': 9,
  'bar': 'test'
};

var extendWith = {
  'another': 'long test',
  'foo': 5
};

var arrOrg = ['test', 'this', 'array'],
    arrCopy = ['replace', 'array', 'without', 'dereference'];

var extendCopy = angular.copy( extendee );
console.log("First Copy and comparison: ", extendCopy, extendee === extendCopy );

var testArr = angular.copy( arrCopy, arrOrg );
console.log("Second Copy and comparison: ", arrOrg, arrOrg === testArr );

var eTwo = angular.copy( extendee );

var extendDeep = {
  'foo': 15,
  'bar': {
    'barOne': 'here',
    'barTwo': 'there'
  }
};

var eThree = {
  'foo': {
    'fooOne': new Date(),
    'fooTwo': 'that',
  },
  'bar': {
    'barOne': 'here',
    'barTwo': 'there'
  }
};

var eDeepTwo = {
  'foo': {
    'fooOne': new Date(),
    'fooTwo': 'that',
    'fooThree': 'deeper'
  },
  'bar': {
    'barOne': 5,
    'barTwo': 10
  },
  'newVar': {
      'var1': 3,
      'var2': 7
  }
};

var extended = angular.extend( extendee, extendWith );

console.log("First Extend and test for comparison: ", extended, extended === extendee );

var eTwoExtended = angular.extend( eTwo, extendDeep);

console.log("Second Extend: ", eTwoExtended );

angular.extend( eThree, eDeepTwo );

console.log("Third Extend and compare inner obj: ", 
            eThree, 
            eThree['bar'] === eDeepTwo['bar'], 
            eThree['newVar'] === eDeepTwo['newVar'] );