angular.extend方法

来源:互联网 发布:网络辟谣平台 编辑:程序博客网 时间:2024/05/28 23:12

AngularJS的angular.extend()方法可以把一个或多个对象中的方法和属性扩展到一个目的对象中,使得这个对象拥有其他对象相同的方法和属性,如下图所示。



angular.extends()方法的第一个参数是要被扩展的对象,后面可以传入一个或多个对象。

如果想要保存一个对象的状态,除了可以调用angular.copy()方法外,还可以把一个空对象{}作为第一个对象传入。

但要注意的是,angular.extends()是非递归的,也就是说:如果扩展的属性中有对象,那么二者同时引用同一个对象!


下面这个例子证实了这个说法:

[html] view plain copy
  1. <!DOCTYPE html>  
  2. <html ng-app="extendApp">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title></title>  
  6.   
  7.     <script src="../js/angular.js"></script>  
  8.     <script type="text/javascript">  
  9.         angular.module("extendApp", [])  
  10.                 .controller("extendController", function($scope)  
  11.                 {  
  12.                     $scope.baby =  
  13.                     {  
  14.                         cry : function()  
  15.                         {  
  16.                             console.log("I can only cry!");  
  17.                         }  
  18.                     }  
  19.   
  20.                     $scope.adult =  
  21.                     {  
  22.                         earn : function()  
  23.                         {  
  24.                             console.log("I can earn money!");  
  25.                         },  
  26.   
  27.                         lover:  
  28.                         {  
  29.                             love:function()  
  30.                             {  
  31.                                 console.log("I love you!");  
  32.                             }  
  33.                         }  
  34.                     }  
  35.   
  36.                     $scope.human = {}  
  37.   
  38.                     $scope.hehe = "hehe ";  
  39.   
  40.                     $scope.extend = function()  
  41.                     {  
  42.                         angular.extend($scope.human, $scope.baby, $scope.adult);  
  43.                         $scope.human.cry();  
  44.                         $scope.human.earn();  
  45.   
  46.                         <!-- 注意,这里修改了lover对象的love()方法,由于extends()方法不是深复制的,$scope.human  
  47.                          和$scope.adult其实引用的是同一个对象-->  
  48.                         $scope.human.lover.love = function()  
  49.                         {  
  50.                             console.log("I hate you!");  
  51.                         }  
  52.   
  53.                         <!-- 这两行都会输出“I hate you !",可怜的adult对象,  
  54.                         他把自己的lover分享给了human! -->  
  55.                         $scope.human.lover.love();  
  56.                         $scope.adult.lover.love();  
  57.   
  58.   
  59.                     }  
  60.                 });  
  61.     </script>  
  62. </head>  
  63. <body>  
  64.   
  65. <div ng-controller="extendController">  
  66.   
  67.     <button ng-click="extend()">点击我!</button>  
  68.   
  69. </div>  
  70. </body>  
  71. </html>  

控制台的打印结果如下:

[plain] view plain copy
  1. I can only cry!  
  2. I can earn money!  
  3. I hate you!  
  4. I hate you!  
1 0