2022-03-02

今天来聊一下new xx() 和 Object.create(xx)
【面试必问题】首先先来讨论下new xx()做了什么,请实现下new操作符

new 操作符

function setNew(F) {
  const obj = {};
  obj.__proto__ = F.prototype; 
  F.apply(obj);
  return obj;
}

分析执行步骤:

  1. 新建一个新的空对象
  2. 将新对象的原型链指向其构造函数的原型对象;
  3. 将构造函数的作用域赋值给新对象;(即 构造函数的this指向新对象);
  4. 返回新对象

Object.create

function create2(base) {
  const f = function() { };
  f.prototype = base;
  return new f();
}

分析执行步骤:

  1. 新建一个新的空函数
  2. 将新函数的原型对象指向接受的参数本身
  3. 返回该函数的实例;即实例.proto = base;

总结:

如果 base 是一个构造函数,那么采用Object.create创建的对象毫无意义;
如果 base是一个字面量对象或者实例对象,则相当于实现了对象的浅拷贝;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 4,118评论 0 0
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,207评论 0 21
  • 方便起见不分parameter[形参,出现在函数定义中]和argument[实参,其值为传入函数的值],一律当作a...
    东月三二阅读 403评论 0 0
  • 学习目标: 理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式 掌握在 JavaScript ...
    小青年coder阅读 996评论 0 2
  • 学习目标: 理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式 掌握在 JavaScript ...
    金桔柠檬加冰阅读 416评论 0 0