angular.extend 实现解析

这是一篇废话,了解的请直接略过。 angular.extend 实现的代码如下:

/**

 * @ngdoc function

 * @name angular.extend

 * @module ng

 * @kind function

 *

 * @description

 * Extends the destination object `dst` by copying own enumerable properties from the `src` object(s)
 * 将一个或多个 src 的 enumerable 属性复制到 dst 对象中。
 * to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so
 * 若您需要保留最初的 dst 对象,你可以
 * by passing an empty object as the target: `var object = angular.extend({}, object1, object2)`.
 * 传入一个空对象作为 dst 参数: `var object = angular.extend({}, object1, object2)` 。
 * Note: Keep in mind that `angular.extend` does not support recursive merge (deep copy).
 * 注:注意 `angular.extend` 不支持递归复制(deep copy)。
 *

 * @param {Object} dst Destination object.
 * @参数 {对象} dst 目标对象
 * @param {...Object} src Source object(s).
 * @参数 {一个或多个对象} src 源对象
 * @returns {Object} Reference to `dst`.
 * @返回 {对象} `dst` 目标对象的引用
 */

function extend(dst) {

  var h = dst.$$hashKey;



  for (var i = 1, ii = arguments.length; i < ii; i++) {

    var obj = arguments[i];

    if (obj) {

      var keys = Object.keys(obj);  //用 Object.keys 而不是 for in 遍历所有 enumerable 属性,浏览器原生支持到 IE9+

      for (var j = 0, jj = keys.length; j < jj; j++) {

        var key = keys[j];

        dst[key] = obj[key];   //将属性直接用等号赋值过来

      }

    }

  }



  setHashKey(dst, h);  //给该  Object 加上 hash 值,方便 angular 快速访问

  return dst;  //返回目标对象

}

拓展阅读