Maison  >  Article  >  interface Web  >  Explication détaillée du code objet/fonction clone en javascript

Explication détaillée du code objet/fonction clone en javascript

伊谢尔伦
伊谢尔伦original
2017-07-27 17:11:153109parcourir

En JavaScript, la méthode simple consiste à utiliser la fonction JSON pour transformer l'objet en chaîne, puis à l'analyser en un nouvel objet. Ou recherchez simplement du code sur Internet. Il existe encore de nombreux codes de clonage dans la communauté open source.

Bien que le code puisse être trouvé, les choses appartiendront toujours aux autres, et apprendre à coder à la main sera toujours un thème constant.

A écrit deux fonctions de clonage :

cloneOwn : clonez les propres propriétés des objets personnalisés, à l'exclusion des propriétés héritées. Les propriétés peuvent être des types de données et des tableaux de base, des objets personnalisés, vous pouvez formuler une liste d'attributs. noms à cloner.

cloneArray : Cloner un tableau. Les éléments du tableau peuvent être des objets ou des types de base.

//第一个参数是被克隆的对象,第二个参数是需要克隆的属性列表
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;
}

Appelez

1. Clonez régulièrement l'objet personnalisé :

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

2. Spécifiez les attributs du clone

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

3. Cloner un objet personnalisé qui contient des attributs de tableau

var a = {
    name: 'kxh',
    age: 20,
    books: ['hai','ho','ali'],
    likes: [
        {wname: 'kaili', wage: 81, fav: "aaaaa"},
        {wname: 'seli', wage: 82, fav: "bbb"},
        {wname: 'ailun', wage: 83, fav: "ccc"},]
};
var b = cloneOwne(a);

4. Cloner un tableau qui contient un objet personnalisé

var a = [
   {
      name:'frank',
      age:20
    },
    {
       name:'leon',
       age:30
     }
];
var b = cloneArray(a);

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn