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)