国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Object的底層實現以及深拷貝和淺拷貝

loostudy / 2188人閱讀

對象合并

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]
        });
      });
    });
  }
});

淺復制

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]
      });
    });
  }
});

深復制

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);

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/106552.html

相關文章

  • 淺探js拷貝和淺拷貝

    摘要:接下來就讓我們更細致的探究中的深淺拷貝。總結以上對深拷貝和淺拷貝做了簡單的介紹,在深拷貝的實現上也只介紹了最簡單的實現形式,并未考慮復雜情況以及相應優化,想要對深拷貝有更深入的了解,需要大家花時間去深入研究,或者可以關注我后續文章的動態。 對象和數組的拷貝對我來說一直都是一個比較模糊的概念,一直有點一知半解,但是在實際工作中又偶爾會涉及到,有時候還會一不小心掉坑里,不知道大家有沒有同樣...

    habren 評論0 收藏0
  • 淺談拷貝和淺拷貝

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

    littleGrow 評論0 收藏0
  • js拷貝和淺拷貝

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

    MAX_zuo 評論0 收藏0
  • JavaScript賦值、拷貝和淺拷貝

    摘要:內存空間分為兩種,棧內存與堆內存棧是系統自動分配的內存空間,由系統自動釋放,堆則是動態分配的內存,大小不定不會自動釋放。 JavaScript的內存空間 在JavaScript中,每一個數據都需要一個內存空間。內存空間分為兩種,棧內存(stack)與堆內存(heap) 棧是系統自動分配的內存空間,由系統自動釋放,堆則是動態分配的內存,大小不定不會自動釋放。 基本數據類型 JavaScr...

    godlong_X 評論0 收藏0
  • 拷貝和淺拷貝全面理解

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

    _DangJin 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<