首页 > 其他分享 >第八篇 手写原理代码 - 对象 【 实现 Object.assign() 和 Object.create() 】

第八篇 手写原理代码 - 对象 【 实现 Object.assign() 和 Object.create() 】

时间:2023-04-11 23:23:17浏览次数:36  
标签:target 对象 第八篇 create Object my assign

1、Object.assign(target, ...sources)

  Object.assign() 方法用于将一个或多个源对象的属性复制到目标对象中。它只复制源对象自身可枚举的属性,同时也能够拷贝 getter 和 setter 函数
  
2、Object.create(proto[, propertiesObject])

  Object.create() 方法创建一个新对象,使用现有的对象来提供新创建的对象的原型
  
  Object.create() 创建的新对象具有指定的原型对象,但其自身并不包含任何属性。如果需要向新对象添加属性,可以使用 Object.defineProperty() 或 Object.defineProperties() 方法。

1、实现 Object.assign()

Object.prototype.my_assign = (target, ...args) => {
  if (target === null || target === undefined) return;
  target = Object(target);
  args.forEach((item) => {
    for (let key in item) {
      if (item.hasOwnProperty(key)) {
        target[key] = item[key];
      }
    }
  });
  return target;
};
使用
const my_assign_obj = Object.my_assign(null, { a: 1, c: 1 }, { a: 8, b: 2 });

console.log("my_assign_obj", my_assign_obj);

2、实现 Object.create()

Object.prototype.my_create = (photo) => {
  function F() {}
  F.prototype = photo;
  return new F();
};

标签:target,对象,第八篇,create,Object,my,assign
From: https://www.cnblogs.com/caix-1987/p/17308246.html

相关文章

  • 关于QMetaObject::invokeMethod的测试
    此函数可以用来在子线程中委托主线程执行特定函数。QMetaObject::invokeMethod默认在主线程中执行函数,除非指定连接方式为Qt::DirectConnection。以下是测试用的代码和输出结果。头文件:classMCcrt:publicQThread{Q_OBJECTpublic:MCcrt(QObject*parent=0):......
  • java11_Object类
    Object类相关JavaObject类是所有类的父类,也就是说Java的所有类都继承了Object,子类可以使用Object的所有方法。Object类位于java.lang包中,编译时会自动导入,我们创建一个类时,如果没有明确继承一个父类,那么它就会自动继承Object,成为Object的子类。内部结构:类的......
  • 定义一个基类Object,有数据成员weight及相应的操作函数,由此派生出Box类,增加数据成员hei
    定义一个基类Object,有数据成员weight及相应的操作函数,由此派生出Box类,增加数据成员height和width及相应的操作函数,声明一个Box对象,观察构造函数与析构函数的调用顺序。#include<bits/stdc++.h>usingnamespacestd;classObject{protected: doubleweight;public: Object(......
  • .Net Standard-Missing compiler member error Microsoft.CSharp.RuntimeBinder.CShar
     最近在玩dynamic的时候出现无法生成的情况."missingcompilermembererrorMicrosoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create"   解决方案:缺少Nuget包: Microsoft.CSharp ......
  • (第八篇)__format__、__hash__、__init_subclass__、__reduce_ex__、__reduce__、__si
    一、__format__(self,format_spec)当我们使用format()方法对一个对象进行格式化时,如果这个对象有__format__方法,那么这个方法就会被调用。它接受一个变量作为参数,并返回一个格式化后的字符串。classPerson:def__init__(self,name,age):self.name=name......
  • List<Map<String, Object>> 排序
    一、代码publicclassTest{publicstaticvoidmain(String[]args){Map<String,Object>map=newHashMap<String,Object>();map.put("name","ZK");map.put("age",13);Map<Str......
  • 通过MenuItem在场景中生成GameObject
    MenuItemAttribute允许你在主菜单中添加新的选项。而这个菜单选项来自于一个静态函数。publicclassTestMenuItem{//Createsanewmenuitem'Examples>CreatePrefab'inthemainmenu.[MenuItem("TestMenuItem/CreatePrefab")]staticvoidCreatePrefa......
  • Python DeprecationWarning: executable_path has been deprecated, please pass in a
    借鉴https://blog.csdn.net/lly1122334/article/details/106217320https://blog.csdn.net/qq_57377057/article/details/128463296https://blog.csdn.net/tangya3158613488/article/details/106902110 将之前谷歌浏览器的105版本替换为110版本解决Python:DeprecationWar......
  • 什么是 Google Tag Manager 的 Data Layer Object?
    在GoogleTagManager中,DataLayerObject是一个JavaScript对象,它可以用于在页面上收集和传递数据。DataLayerObject通常用于将有关用户和页面的信息收集和传递给GoogleAnalytics或其他第三方分析和营销工具。使用DataLayerObject,您可以在网站的任何地方设置变量并将......
  • 遍历JsonObject 所有的key和value封装到两个list中
    可以使用main方法测试体验效果publicstaticvoidmain(String[]args){StringoriginalStr="{\"code\":200,\"msg\":\"success\",\"data\":{\"realName\":\"超级管理员\",\"defaultApp\":......