美文网首页
ES6 完全克隆一个对象并且拷贝其原型对象属性

ES6 完全克隆一个对象并且拷贝其原型对象属性

作者: ChooAcc | 来源:发表于2020-05-07 13:39 被阅读0次

一. Object.getPrototypeOf()用法

 Object.getPrototypeOf() 方法返回指定对象的原型(内部[[Prototype]]属性的值)。

语法

Object.getPrototypeOf(object)

参数

obj
 要返回其原型的对象。

返回值

 给定对象的原型。如果没有继承属性,则返回 null

二. Object.assign()用法

 Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

语法

Object.assign(target, ...sources)

参数

target
 目标对象。
sources
 源对象。

返回值

 目标对象。

三. Object.create()用法

 Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的proto

语法

Object.create(proto[, propertiesObject])

参数

proto
 新创建对象的原型对象。
propertiesObject
 可选。如果没有指定为 undefined,则是要添加到新创建对象的不可枚举(默认)属性(即其自身定义的属性,而不是其原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应Object.defineProperties()的第二个参数。

返回值

 一个新对象,带着指定的原型对象和属性。

例外

 如果propertiesObject参数是 null或非原始包装对象,则抛出一个 TypeError 异常。

四 . Object.getOwnPropertyDescriptors()用法

 Object.getOwnPropertyDescriptors()方法用来获取一个对象的所有自身属性的描述符。

语法

Object.getOwnPropertyDescriptors(obj)

参数

obj
 任意对象。

返回值

 所指定对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象。

五. 克隆对象

// 写法一
const clone1 = {
  __proto__: Object.getPrototypeOf(obj),
  ...obj
};

// 写法二
const clone2 = Object.assign(
  Object.create(Object.getPrototypeOf(obj)),
  obj
);

// 写法三
const clone3 = Object.create(
  Object.getPrototypeOf(obj),
  Object.getOwnPropertyDescriptors(obj)
)
// 建议二、三写法。

题外内容

浅拷贝一个对象

Object.assign() 方法只能拷贝源对象的可枚举的自身属性,同时拷贝时无法拷贝属性的特性们,而且访问器属性会被转换成数据属性,也无法拷贝源对象的原型,该方法配合 Object.create()方法可以实现上面说的这些。

Object.create(
  Object.getPrototypeOf(obj), 
  Object.getOwnPropertyDescriptors(obj) 
);

相关文章

  • ES6 完全克隆一个对象并且拷贝其原型对象属性

    一. Object.getPrototypeOf()用法  Object.getPrototypeOf() 方法返...

  • 原型模式

    定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象克隆(浅度克隆:拷贝值类型或者引用,深度克隆:...

  • 原型模式

    原型模式定义 1.用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。克隆(浅度克隆->拷贝值类型或引...

  • Python设计模式 - 原型模式

    """ 原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式本质就是克隆对象,所以...

  • 设计模式-原型模式

    1、原型模式的定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象(浅度克隆->拷贝值类型或者引用...

  • 4 创建型之原型模式

    概念 通过克隆(深拷贝)已存在的对象来创建新的对象。 解释 将已存在的对象作为原型,在对此原型进行克隆得到克隆对象...

  • 创建型-原型模式

    定义 用原型实例对象指定创建对象种类,并通过拷贝这些原型对象创建新的对象(根据原型对象,克隆一个新的对象) 优点 ...

  • 设计模式-原型模式-Prototype

    原型模式的核心:依照一个已存在实例创建一个新的实例,并继承其结构和属性值! 一、克隆对象的属性对象 二、克隆对象 ...

  • 设计模式-建造篇(原型模式)

    原型模式 其实也是克隆模式,他就是对原有的对象实例进行一次拷贝。但是对象不同,对象其中的属性都相同。

  • 原型模式(Prototype)

    定义 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 本质 克隆生成对象 克隆是手段,目的是生成对...

网友评论

      本文标题:ES6 完全克隆一个对象并且拷贝其原型对象属性

      本文链接:https://www.haomeiwen.com/subject/vntaghtx.html