new操作符过程,发生了什么

本文详细解释了JavaScript中new运算符的工作原理,包括创建空对象、设置原型链、执行构造函数以及返回对象的过程。同时探讨了当构造函数返回不同类型值时的行为表现。

new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。new 关键字会进行如下的操作:

  • 创建一个空的简单JavaScript对象(即{});
	var obj = {};
  • 设置原型链,将obj的__proto__成员指向了构造函数的prototype
	obj.__proto__ = xx.prototype;
  • 将步骤1新创建的对象作为this的上下文 ;
	let o = xx.call(obj);
  • 如果构造函数return了一个新的“对象”,那么这个对象就会取代整个new出来的结果。如果构造函数没有return对象,那么就会返回步骤1所创建的对象,即隐式返回this
	return	o ? o : obj  

完整版本

	function newObject() {
		var con = [].shift.call(arguments)
		var obj = Object.create(con.prototype)
		var res = con.apply(obj, arguments)
		return res ? res : obj	
	}

声明一个普通函数, 该函数返回一个基本类型, 或者返回函数, 这个时候会发生什么?

  • 函数返回基本类型,使用new, 会生成空对象
  • 函数返回函数类型,使用new, 返回该函数
// 函数返回基本类型 -----------------
function func(a,b){
	return a + b
}

var c = new func(1,2)
console.dir(c) // func{} func类型的空对象
Object.keys(c) // []


// 函数返回函数 ---------------------
function func(){
	return function(){
		return 22
	}
}

var c = new func()
c() // 22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值