Rumah  >  Artikel  >  hujung hadapan web  >  Penjelasan terperinci tentang objek klon dalam javascript

Penjelasan terperinci tentang objek klon dalam javascript

PHPz
PHPzasal
2016-05-16 16:29:112294semak imbas

Artikel ini terutamanya memperkenalkan kaedah pengklonan objek dalam JavaScript Rakan yang memerlukan boleh merujuknya.

Semasa pembangunan, adalah perkara biasa untuk mengganggu hubungan rujukan antara objek dan hanya mahu membuat salinan objek tidak dapat dielakkan.

Dalam JavaScript, kaedah mudah ialah menggunakan fungsi JSON untuk merangkai objek menjadi rentetan, dan kemudian menghuraikannya menjadi objek baharu. Atau hanya mencari kod dari Internet Masih terdapat banyak kod klon dalam komuniti sumber terbuka.

Walaupun kod itu boleh ditemui, perkara akan sentiasa menjadi milik orang lain dan pembelajaran kod dengan tangan akan sentiasa menjadi tema yang berterusan.

Saya sendiri menulis dua fungsi klon:

cloneOwn: Mengklon sifat objek tersuai sendiri, tidak termasuk sifat yang diwarisi Sifat ini boleh menjadi jenis data asas dan tatasusunan, Objek tersuai, anda boleh tentukan senarai nama atribut untuk diklon.

cloneArray: Mengklon tatasusunan Elemen dalam tatasusunan boleh menjadi objek atau jenis asas.

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

Panggil

1 kerap mengklon objek tersuai:

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

2. Tentukan atribut klon

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

3. Klonkan objek tersuai yang mengandungi atribut tatasusunan

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. sebagai , terdapat beberapa masalah dengan pengklonan objek terbina dalam, seperti jenis datatime.

var a = [
   {
      name:'frank',
      age:20
    },
    {
       name:'leon',
       age:30
     }
];
var b = cloneArray(a);
Masalah menangani masalah, dan proses pembelajaran seperti itu juga perlu.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn