模拟实现js中的new操作符
2021-06-05 13:03
标签:result date 参数 运算符 apply ons console 步骤 一个 new运算符创建了一个用户自定义的对象类型的实例或具有构造函数的内置对象类型之一 定义一个构造函数Student,该函数接收两个参数name和age: new实现了那些功能: 如果构造函数返回了一个“对象”,那么这个对象会取代整个new出来的结果。如果构造函数没有返回对象,那么new出来的结果为步骤1创建的对象。(一般情况下构造函数不返回任何值,不过用户如果想覆盖这个返回值,可以自己选择返回一个普通对象来覆盖。当然,返回数组也会覆盖,因为数组也是对象。 模拟实现js中的new操作符 标签:result date 参数 运算符 apply ons console 步骤 一个 原文地址:https://www.cnblogs.com/my466879168/p/12332842.html能否实现js的new操作符
new
function Student(name,age){
this.name=name
this.age=age
}
let first=new Student('dylan','26')
console.log(first.name);// dylan
console.log(first.age);// 26
function copyNew(obj,...args){
//1.创建了一个空对象
const newObj={}
//2. 空对象的原型指向了构造函数的prototype
newObj.__proto__=obj.prototype
//上面的两步可以合为一步
// let newObj=Object.create(obj.prototype)
//3. 将obj的this改为新创建对象
let result=obj.apply(newObj,args)
//判断类里面有返回值吗?返回值是对象吗?如果是的那那就返回类中的返回值,如果不是的话那就返回新创建的对象
return typeof result ==='object'?result:newObj
}