ES6 克隆對象


淺克隆:只能克隆原始對象自身的值,不能克隆它繼承的值

方法一:

function clone(origin) {
  return Object.assign({}, origin);
}

方法二:

function clone(origin) {
  return JSON.parse(JSON.stringify(origin))
}

深克隆:克隆對象自身的值和集成的值

方法一:

function clone(origin) {
  let originProto = Object.getPrototypeOf(origin);
  return Object.assign(Object.create(originProto), origin);
}

 方法二:

function clone(obj){
    return  Object.create(
      Object.getPrototypeOf(obj),
      Object.getOwnPropertyDescriptors(obj)
    )
}  

方法三:   __proto__ 屬性在非瀏覽器環境不一定部署,早期的IE肯定也沒有  

function clone(obj){
  return  {
      __proto__: Object.getPrototypeOf(obj),
      ...obj
    };  
}

 

Object.assign方法用於對象的合並,將源對象(source)的所有可枚舉屬性,復制到目標對象(target),不包含原型

Object.assign(target, source1, source2);

_proto__屬性(前后各兩個下划線),用來讀取或設置當前對象的prototype對象

Object.create()方法創建一個新對象,使用現有的對象來提供新創建的對象的__proto__

// es6 的寫法
const obj = {
  method: function() { ... }
};
obj.__proto__ = someOtherObj;

// es5 的寫法
var obj = Object.create(someOtherObj);
obj.method = function() { ... };

Object.setPrototypeOf()方法的作用與__proto__相同,用來設置一個對象的prototype對象,返回參數對象本身。它是 ES6 正式推薦的設置原型對象的方法

Object.getPrototypeOf()該方法與Object.setPrototypeOf方法配套,用於讀取一個對象的原型對象。

Object.getOwnPropertyDescriptors()方法,返回指定對象所有自身屬性(非繼承屬性)的描述對象。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM