js中的new

文章类型:Javascript

发布者:hp

发布时间:2023-05-28

一:定义

1:主要作用就是执行一个构造函数,返回一个实例对象

二:流程

1:创建一个新对象

2:新对象连接到构造函数原型上(让实例可以访问构造函数原型(constructor.prototype)所在原型链上的属性)

3:执行构造函数代码,改变this,(添加新属性)

4:返回新对象(构造函数返回的最后结果是引用数据类型)

三:总结

1:new关键词执行之后总是会返回一个对象,要么是实例对象,要么就是return指定的对象

2:构造函数如果有显式返回值,且返回值为对象类型,那么构造函数返回结果不再是目标实例

四:手写版本

1:方法

function customNew(fn,...args){
		
		/*不是函数,直接返回*/
		if(typeof fn!='function') return  '必须是函数!!!';
		/*创建一个新对象*/
		let obj=Object.create(null)
		/*对象连接到构造函数原型上*/
		obj.__proto__=fn.prototype
		/*执行fn并且改变this指向,将this指向新建的对象obj,这样,obj就可以访问构造函数的属性*/
		let res=fn.apply(obj,args)
		/*如果fn有返回 则作为操作返回的内容,构造就返回obj*/
		return res instanceof Object ? res : obj
		
	}

2:测试

function Person(name){
		this.name=name

	}
	const person = new Person('lucas')
		console.log(person)
	const person2 =customNew(Person, 'lucas')
		console.log(person2)