new操作符具体干了什么呢?

new关键字主要的作用是继承

当一个构造函数前加上new的时候,背地里来做了四件事:
1.生成一个空的对象并将其作为 this;
2.将空对象的 proto 指向构造函数的 prototype;
3.运行该构造函数;
4.如果构造函数没有 return 或者 return 一个返回 this 值是基本类型,则返回this;如果 return 一个引用类型,则返回这个引用类型。

对应伪代码:
对于const a = new Foo();,new干了以下事情

const o = new Object();//创建了一个新的空对象o
o.__proto__ = Foo.prototype;//让这个o对象的` __proto__`指向函数的原型`prototype`
Foo.call(o);//this指向o对象
a = o;//将o对象赋给a对象

new一共经历4个阶段

1、创建一个空对象

var obj = new Object();

2、设置原型链

此时便建立了obj对象的原型链

obj._proto_ = Object.prototype;

3、让Func的this指向obj,并执行Func函数体

Object.call(obj);

4、判断Func(构造函数)的返回值类型

return typeof result === 'object'? result : obj;

构造函数默认return this,不用写,如下

function A(){
  this.name = x;
  // return this; 
}

如果构造函数return是基本数据类型:

return 1
return "abc"

return 后的东西忽略,就是return {}

如果是return的是引用类型:
则以return的内容为准

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

推荐阅读更多精彩内容

  • ①创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。②属性和方法被加入到 this 引用的...
    6659a0f02826阅读 273评论 0 0
  • JavaScript的组成 JavaScript 由以下三部分组成:ECMAScript(核心):JavaScri...
    纹小艾阅读 3,513评论 0 3
  • 1,javascript 基础知识 Array对象 Array对象属性 Arrray对象方法 Date对象 Dat...
    Yuann阅读 966评论 0 1
  • 转载请声明出处 博客原文 随手翻阅以前的学习笔记,顺便整理一下放在这里,方便自己复习,也希望你有也有帮助吧 第一课...
    前端进阶之旅阅读 12,793评论 13 94
  • 姓名:徐祖德 公司:广东思沃精密机械有限公司 230期_利他1组 272期_乐观2组志工 【日精进打卡第144天】...
    徐祖德阅读 98评论 0 0