「前端」new操作符究竟做了什么

本文深入探讨JavaScript的new操作符的工作原理。从创建空对象、原型链链接、构造函数内部处理到返回值的判断,逐步解析new操作符背后的机制。通过实例代码,帮助初学者理解这一常见但复杂的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开门见山的说,new操作符可能是大部分JavaScript初学者的噩梦,这篇文章就来简单详细地介绍一下使用了new操作符后,究竟会发生什么。
先看一段代码:

function Person(firstName, lastName) {
	this.firstName = firstName;
	this.lastName = lastName;
}
var member = new Person('Jack', 'Wang');
member.firstName;	// "Jack"
member.lastName;	// "Wang"
member.__proto__ === Person.prototype;	// true

在这里插入图片描述
为什么会这样?这就涉及到使用new操作符后发生的一系列步骤:

第一步

创建一个空的对象:

var member = {};
// 或者
var member = new Object();

这一步很简单易懂,new嘛,不用多说。

第二步
member.__proto__ = Person.prototype;

这一步就是进行原型链接,将member__proto__链接到Person的原型上。
这也是为什么

member.__proto__ === Person.prototype;	// true

的值为true的原因。
至于原型,不了解的移步:继承与原型链

第三步
var that = Person.call(member);	// 绑定this并执行

Personthis指向member,这也是为什么member.firstNamemember.lastName返回的是"Jack""Wang"的原因。实际的执行过程是这样的:

function Person(firstName, lastName) {
	member.firstName = firstName;
	member.lastName = lastName;
}

在这里插入图片描述

第四步

判断Person函数的返回值:

  • 如果是值类型(即基本类型),则丢弃;
  • 如果是引用类型,则替换member

Person函数中若没有写return语句,则默认返回undefined,属于基本类型,丢弃。若return语句返回的是this,则由于第三步已经对this指向做了改变,返回的就是member本身,无所谓替换不替换。

今天有些憨憨,学什么都学不进去,只好写篇博客记录一下备忘了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值