ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptによるクローンオブジェクト/関数コードの詳細説明

JavaScriptによるクローンオブジェクト/関数コードの詳細説明

伊谢尔伦
伊谢尔伦オリジナル
2017-07-27 17:11:153040ブラウズ

JavaScript の簡単な方法は、JSON 関数を使用してオブジェクトを文字列に文字列化し、それを新しいオブジェクトに解析することです。または、インターネットからコードを検索してください。オープンソース コミュニティにはまだ多くのクローン コードが存在します。

コードは見つかりますが、ものは常に他人のものであり、手作業でコードを学習することは常に永遠のテーマです。

2 つの複製関数を作成しました:

cloneOwn: 継承されたプロパティを除く、カスタム オブジェクトの独自のプロパティを複製します。カスタム オブジェクトの場合、複製するプロパティの名前を指定できます。リスト。

cloneArray: 配列のクローンを作成します。配列内の要素はオブジェクトまたは基本型になります。

//第一个参数是被克隆的对象,第二个参数是需要克隆的属性列表
function cloneOwn() {
  var obj = arguments[0];
  if (typeof obj === 'undefined' || obj === null)
      return {};
  if (typeof obj !== 'object')
      return obj;
  //第二个参数是属性名称列表,就采用该列表进行刷选
  //否则就克隆所有属性
  var attrs = arguments[1];
  var enable_spec_attr = true;
  if (!(attrs instanceof Array)) {
      //console.log(attrs);
      attrs = obj;
      enable_spec_attr = false;
  }
  var result = {};
  var i;
  for (i in attrs) {
      attr = enable_spec_attr? attrs[i]: i;
      //console.log(attr);
      if (obj.hasOwnProperty(attr)) {
          if (obj[attr] instanceof Array) {
              result[attr] = cloneArray(obj[attr]);
          }
          else if (typeof obj[attr] === 'object') {
              result[attr] = cloneOwn(obj[attr]);
          } else {
              result[attr] = obj[attr];
          }
      }
  }
  return result;
}
//克隆数组
function cloneArray(array) {
  if (typeof array === 'undefined' || array === null)
    return [];
  if (!(array instanceof Array))
    return [];
  result = [];
  var i;
  for(i in array) {
    if (typeof array[i] !== 'object') {
      result[i] = array[i];
      continue;
    }
    //clone object
    result[i] = cloneOwn(array[i]);
  }
  return result;
}

を呼び出します。 1. カスタム オブジェクトを定期的に複製します。

var a = {
    name:'frank',
    age:20
};
var b= cloneOwn(a);

2. 配列属性を含むカスタム オブジェクトを複製します

var a = {
    name:'frank',
    age:20,
    address:'any where'
};
var b = cloneOwne(a, ['name', 'age']);

4. カスタム オブジェクトを含む配列を複製します。リーリー

以上がJavaScriptによるクローンオブジェクト/関数コードの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。