javascript - Angular 的 copy 函数,看不太懂,求分析下
天蓬老师
天蓬老师 2017-04-11 09:01:25
0
24
1550
function copy(source, destination, stackSource, stackDest) {
  if (isWindow(source) || isScope(source)) {
    throw ngMinErr('cpws',
      "Can't copy! Making copies of Window or Scope instances is not supported.");
  }

  if (!destination) {
    destination = source;
    if (source) {
      if (isArray(source)) {
        destination = copy(source, [], stackSource, stackDest);
      } else if (isDate(source)) {
        destination = new Date(source.getTime());
      } else if (isRegExp(source)) {
        destination = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]);
        destination.lastIndex = source.lastIndex;
      } else if (isObject(source)) {
        destination = copy(source, {}, stackSource, stackDest);
      }
    }
  } else {
    if (source === destination) throw ngMinErr('cpi',
      "Can't copy! Source and destination are identical.");

    stackSource = stackSource || [];
    stackDest = stackDest || [];

    if (isObject(source)) {
      var index = indexOf(stackSource, source);
      if (index !== -1) return stackDest[index];

      stackSource.push(source);
      stackDest.push(destination);
    }

    var result;
    if (isArray(source)) {
      destination.length = 0;
      for ( var i = 0; i < source.length; i++) {
        result = copy(source[i], null, stackSource, stackDest);
        if (isObject(source[i])) {
          stackSource.push(source[i]);
          stackDest.push(result);
        }
        destination.push(result);
      }
    } else {
      var h = destination.$$hashKey;
      if (isArray(destination)) {
        destination.length = 0;
      } else {
        forEach(destination, function(value, key) {
          delete destination[key];
        });
      }
      for ( var key in source) {
        result = copy(source[key], null, stackSource, stackDest);
        if (isObject(source[key])) {
          stackSource.push(source[key]);
          stackDest.push(result);
        }
        destination[key] = result;
      }
      setHashKey(destination,h);
    }

  }
  return destination;
}
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

Antworte allen(24)
黄舟

一般这么长的代码都不会有人看, 真的. 不信你等等看.

大家讲道理

一般这么长的代码都不会有人看, 真的. 不信你等等看.

伊谢尔伦

一般这么长的代码都不会有人看, 真的. 不信你等等看

洪涛

一般这么长的代码都不会有人看, 真的. 不信你等等看.

迷茫

一般这么长的代码都不会有人看, 真的. 不信你等等看

刘奇

一般这么长的代码都不会有人看, 真的. 不信你等等看

Ty80

一般这么长的代码都不会有人看, 真的. 不信你等等看.

阿神

一般这么长的代码都不会有人看, 真的. 不信你等等看

巴扎黑

一般这么长的代码都不会有人看, 真的. 不信你等等看

左手右手慢动作

一般这么长的代码都不会有人看, 真的. 不信你等等看.

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage