AngularJS - 원본 읽기(4)

2420 단어
hashMap을 보고 extend()를 보십시오. 부류 속성과 방법을 계승하는 데 사용됩니다.
// argument , 
function extend(dst) {
  var h = dst.$$hashKey;
  forEach(arguments, function(obj){
    if (obj !== dst) {// 
      forEach(obj, function(value, key){
        dst[key] = value;
      });
    }
  });

  setHashKey(dst,h);
  return dst;
}

function setHashKey(obj, h) {
  if (h) {
    obj.$$hashKey = h;
  }
  else {
    delete obj.$$hashKey;
  }
}

$hashKey가 필터 처리를 했습니다. 계승된 순서는 뒤에 있는argument가 앞에 있는 것을 덮어씁니다.계승이니 깊이copy와shallowcopy도 볼 수 있다.
function copy(source, destination){
  if (isWindow(source) || isScope(source)) {// angular , , 
    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, []);
      } else if (isDate(source)) {
        destination = new Date(source.getTime());
      } else if (isRegExp(source)) {
        destination = new RegExp(source.source);
      } else if (isObject(source)) {
        destination = copy(source, {});
      }
    }
  } else {
    if (source === destination) throw ngMinErr('cpi',
      "Can't copy! Source and destination are identical.");
    if (isArray(source)) {
      destination.length = 0;
      for ( var i = 0; i < source.length; i++) {
        destination.push(copy(source[i]));
      }
    } else {
      var h = destination.$$hashKey;
      forEach(destination, function(value, key){
        delete destination[key];
      });
      for ( var key in source) {
        destination[key] = copy(source[key]);
      }
      setHashKey(destination,h);
    }
  }
  return destination;
}

function isRegExp(value) {//isDate ,
  return toString.call(value) === '[object RegExp]';//toString  
  //, function ,   
}
function isRegExp1(value){
    return value && value.toString()==='[object RegExp]'&& typeof value !=='string';
}

위의 것은 깊이copy지만string에 대한 판정이 부족하여 단독으로 제기할 때 수정을 해야 합니다.shallowCopy에 대해서는 더 이상 설명하지 마십시오. 원본 코드는 다음과 같습니다.
function shallowCopy(src, dst) {
  dst = dst || {};

  for(var key in src) {
    if (src.hasOwnProperty(key) && key.substr(0, 2) !== '$$') {//$$  
      dst[key] = src[key];
    }
  }
  return dst;
}

좋은 웹페이지 즐겨찾기