JavaScript深入理解-new关键字创建对象底层原理

JavaScript中 new 操作符可以通过构造函数创建对象,但是其底层原理大多人都不太清楚,下面我们来详解一下 new 操作符的底层原理。(PS:JavaScript有8种内置的构造函数:Object、Array、Function、Date、RegExp、Number、String、Set、Map

首先看一下这句代码:

var obj = {};
var arr = [];

// 其实这只是JavaScript中创建对象的语法糖,本质上为

var obj = new Object();
var arr = new Array();

下面详解 new Object() 底层是如何运行的,大致分为三步,

  1. 创建一个空对象 {};
  2. 将空对象的 proto 原型对象 指向 Object.prototype;
  3. 将Object构造函数的this指向当前空对象
  var obj;

  创建空对象:{};

  {}.__proto__ = Object.prototype;

  Object.call({});

  obj = {};

示例:

  function People() {
    this.name = 'phuhoang';
  }
  var me = new People();        // { name: 'phuhoang'}

  // 其执行过程拆分为

  0. var me;
  1. 内存开辟空间创建空对象 {}                // {}
  2. {}.__proto__ = People.prototype      // { __proto__: People.prototype }
  3. People.call({})                      // { name: 'phuhoang', __proto__: People.prototype }
  4. me = { name: 'phuhoang', __proto__: People.prototype }  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的慨念,而通过类可以创建任意多个...
    threetowns阅读 4,365评论 0 4
  • JavaScript面向对象程序设计 本文会碰到的知识点:原型、原型链、函数对象、普通对象、继承 读完本文,可以学...
    moyi_gg阅读 4,140评论 0 2
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 10,736评论 0 21
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 10,232评论 0 5
  • [我的100个成长感悟]@kiki-070 2015年5月9日 你是否已经有了情绪的觉察意识,请用一个实例来例证。...
    吉吉kiki阅读 3,025评论 0 1

友情链接更多精彩内容