成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Object的底層實(shí)現(xiàn)以及深拷貝和淺拷貝

loostudy / 2206人閱讀

對(duì)象合并

Object.defineProperty(Object, "myAssign", {
  configurable: true,
  enumerable: true,
  writable: false,
  value: function() {
    if (arguments[0] === undefined) {
      throw Error("dest can not be undefined");
    }
    let rest = Array.prototype.slice.call(arguments, 1);
    Array.prototype.forEach.call(rest, function(source) {
      Object.getOwnPropertyNames(source).forEach(function(prop) {
        Object.defineProperty(arguments[0], prop, {
          configurable: true,
          enumerable: true,
          writable: true,
          value: source[prop]
        });
      });
    });
  }
});

淺復(fù)制

Object.defineProperty(Object, "shallowClone", {
  configurable: true,
  enumerable: true,
  writable: false,
  value: function(dest, source) {
    if (dest === undefined) {
      throw Error("dest can not be undefined");
    }
    Object.getOwnPropertyNames(source).forEach(function(prop) {
      Object.defineProperty(dest, prop, {
        configurable: true,
        enumerable: true,
        writable: true,
        value: source[prop]
      });
    });
  }
});

深復(fù)制

Object.defineProperty(Object, "deepClone", {
  configurable: true,
  enumerable: true,
  writable: false,
  value: function(dest, source) {
    if (dest === undefined || source === undefined) {
      throw Error("dest can not be undefined");
    }
    if (!(source instanceof Object)) {
      throw Error(source, "is not a object");
    }
    Object.getOwnPropertyNames(source).forEach(function(prop) {
      if (typeof source[prop] === Object) {
        Object.deepClone(dest[prop], source[prop]);
      } else {
        dest[prop] = source[prop];
      }
    });
  }
});
const a = {
  x: 1,
  y: 2,
  z: {
    m: 3,
    n: 4
  }
}

const b = {
  r: 4,
  s: 5,
  z: {
    m: 5,
    n: 6
  }
}

Object.deepClone(a, b);

console.log(a);
b.z.m = 12;
console.log(a);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106552.html

相關(guān)文章

  • 淺探j(luò)s拷貝和淺拷貝

    摘要:接下來就讓我們更細(xì)致的探究中的深淺拷貝??偨Y(jié)以上對(duì)深拷貝和淺拷貝做了簡(jiǎn)單的介紹,在深拷貝的實(shí)現(xiàn)上也只介紹了最簡(jiǎn)單的實(shí)現(xiàn)形式,并未考慮復(fù)雜情況以及相應(yīng)優(yōu)化,想要對(duì)深拷貝有更深入的了解,需要大家花時(shí)間去深入研究,或者可以關(guān)注我后續(xù)文章的動(dòng)態(tài)。 對(duì)象和數(shù)組的拷貝對(duì)我來說一直都是一個(gè)比較模糊的概念,一直有點(diǎn)一知半解,但是在實(shí)際工作中又偶爾會(huì)涉及到,有時(shí)候還會(huì)一不小心掉坑里,不知道大家有沒有同樣...

    habren 評(píng)論0 收藏0
  • 淺談拷貝和淺拷貝

    摘要:而引用類型值是指那些保存堆內(nèi)存中的對(duì)象,意思是變量中保存的實(shí)際上只是一個(gè)指針,這個(gè)指針指向內(nèi)存中的另一個(gè)位置,該位置保存對(duì)象。而堆內(nèi)存主要負(fù)責(zé)對(duì)象這種變量類型的存儲(chǔ)。我們需要明確一點(diǎn),深拷貝與淺拷貝的概念只存在于引用類型。 深拷貝和淺拷貝 說起深拷貝和淺拷貝,首先我們來看兩個(gè)栗子 // 栗子1 var a = 1,b=a; console.log(a); console.log(b) ...

    littleGrow 評(píng)論0 收藏0
  • js拷貝和淺拷貝

    摘要:深拷貝和淺拷貝深拷貝和淺拷貝的示意圖大致如下淺拷貝只復(fù)制指向某個(gè)對(duì)象的指針,而不復(fù)制對(duì)象本身,新舊對(duì)象還是共享同一塊內(nèi)存。參考文章什么是深拷貝和淺拷貝及其實(shí)現(xiàn)方式 走在前端的大道上 本篇將自己讀過的相關(guān)文章中,對(duì)自己有啟發(fā)的章節(jié)片段總結(jié)在這(會(huì)對(duì)原文進(jìn)行刪改),會(huì)不斷豐富提煉總結(jié)更新。 淺拷貝 var m = { a: 10, b: 20 } var n = m; n.a = 15; ...

    MAX_zuo 評(píng)論0 收藏0
  • JavaScript賦值、拷貝和淺拷貝

    摘要:內(nèi)存空間分為兩種,棧內(nèi)存與堆內(nèi)存棧是系統(tǒng)自動(dòng)分配的內(nèi)存空間,由系統(tǒng)自動(dòng)釋放,堆則是動(dòng)態(tài)分配的內(nèi)存,大小不定不會(huì)自動(dòng)釋放。 JavaScript的內(nèi)存空間 在JavaScript中,每一個(gè)數(shù)據(jù)都需要一個(gè)內(nèi)存空間。內(nèi)存空間分為兩種,棧內(nèi)存(stack)與堆內(nèi)存(heap) 棧是系統(tǒng)自動(dòng)分配的內(nèi)存空間,由系統(tǒng)自動(dòng)釋放,堆則是動(dòng)態(tài)分配的內(nèi)存,大小不定不會(huì)自動(dòng)釋放。 基本數(shù)據(jù)類型 JavaScr...

    godlong_X 評(píng)論0 收藏0
  • 對(duì)拷貝和淺拷貝全面理解

    摘要:關(guān)于深拷貝和淺拷貝從原理看淺拷貝拷貝一層,對(duì)象級(jí)別的則拷貝引用深拷貝拷貝多層,每個(gè)層級(jí)的屬性都會(huì)拷貝從現(xiàn)象看復(fù)制了,被修改后,隨變化而變化淺拷貝不變深拷貝深拷貝針對(duì)的復(fù)雜的類型數(shù)據(jù)如直接賦值的單層拷貝,如,雖然不受的影響,但是這也不算做 關(guān)于深拷貝和淺拷貝 從原理看: 淺拷貝:拷貝一層,對(duì)象級(jí)別的則拷貝引用 深拷貝:拷貝多層,每個(gè)層級(jí)的屬性都會(huì)拷貝 從現(xiàn)象看:A復(fù)制了B,B被修改后...

    _DangJin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<