JS中new操作符做了什么?

简介: new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。new 关键字会进行如下的操作:创建一个空的简单JavaScript对象(即{});链接该对象(即设置该对象的构造函数)到另一个对象 ;将步骤1新创建的对象作为this的上下文 ;如果该函数没有返回对象,则返回this。

1.new操作符做了什么


new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。


new 关键字会进行如下的操作: 创建一个空的简单JavaScript对象(即{}); 链接该对象(即设置该对象的构造函数)到另一个对象 ; 将步骤1新创建的对象作为this的上下文 ; 如果该函数没有返回对象,则返回this。


2.简单实现


function create(Con, ...args){
  // 创建一个空的对象
  let  obj = Object.create(null);
  // 将空对象指向构造函数的原型链
  Object.setPrototypeOf(obj, Con.prototype);
  // obj绑定到构造函数上,便可以访问构造函数中的属性,即obj.Con(args)
  let result = Con.apply(obj, args);
  // 如果返回的result是一个对象则返回
  // new方法失效,否则返回obj
  return result instanceof Object ? result : obj;
}
// 测试
function company(name, address) {
    this.name = name;
    this.address = address;
  }
var company1 = create(company, 'yideng', 'beijing');
console.log('company1: ', company1);



相关文章
|
1月前
|
JavaScript 前端开发 安全
javascript中的可选链操作符
javascript中的可选链操作符
|
3月前
|
JavaScript 前端开发 Java
【面试题】new 一个对象时,js 做了什么?
【面试题】new 一个对象时,js 做了什么?
|
1月前
egg.js 24.12sequelize模型-where操作符
egg.js 24.12sequelize模型-where操作符
25 1
egg.js 24.12sequelize模型-where操作符
|
3月前
|
存储 JavaScript 前端开发
JavaScript 自定义对象 及 new()原理与实现 如何完整地手写实现new
JavaScript 自定义对象 及 new()原理与实现 如何完整地手写实现new
59 0
|
3月前
|
JavaScript 前端开发
js中new关键字的作用,new一个对象的过程中发生了什么
js中new关键字的作用,new一个对象的过程中发生了什么
|
4月前
|
JavaScript 前端开发 API
(简单详细)javascript中new url()属性,轻松解析url地址
(简单详细)javascript中new url()属性,轻松解析url地址
127 0
|
4月前
|
JavaScript 前端开发
js中new关键字的作用
js中new关键字的作用
23 0
|
4月前
|
JavaScript 前端开发
JS中new关键词具体起到了什么作用
JS中new关键词具体起到了什么作用
20 0
|
4月前
|
JavaScript 前端开发 Java
JavaScript难点:原型、原型链、继承、new、prototype和constructor
JavaScript 不像 Java、C++ 这种纯面向对象的语言,可以通过类实现继承,JavaScript中的继承是通过原型实现的,即使 ES6 中新增的 class 类也只是原型的语法糖而已
48 4
|
4月前
|
人工智能 JavaScript
js正则表达式new RegExp(表达式, “gi“)不区分大小写、忽略大小写匹配替换字符
js正则表达式new RegExp(表达式, “gi“)不区分大小写、忽略大小写匹配替换字符