var obj1=new fun()
1.先创建一个空对象 var obj={}
2.将空对象的原型绑定为new操作符后面的构造函数的原型 obj.__proto__=fun.prototype
3.让this指向新创建的对象,并执行构造函数的函数体,创建相关属性和方法
4.判断执行结果是否返回了新的对象,如果有返回新对象,就是用返回的新对象,没有的话,返回原来创建的对象(obj)
//手动实现一个new操作符:
function newOpreator() {
let constructor = [].shift.call(arguments) //截取传入函数的第一个参数,来获取构造函数
var obj = {} //步骤<1> //定义一个空对象
obj.__proto__ = constructor.prototype //步骤<2> //将obj的原型绑定为传进来的构造函数
// 步骤<1>和步骤<2>和底下是等价的
//var obj=Object.create(constructor.prototype)
let result = constructor.apply(obj, arguments) //将this绑定为obj,并执行传进来的构造函数的函数体,创造相关属性和方法
if (Object.prototype.toString.call(result) === '[object Object]') { //判断上一步函数的执行结果有无返回值,有返回值,并且是对象类型,就将返回的对象返回出去,作为构造函数的实例,
return result
}
return obj //反之,就将obj返回,作为构造函数的实例
}
function Fun(name, age) {
this.name = name
this.age = age
}
var bb = newOp
描述new一个构造函数时发生了什么
最新推荐文章于 2025-02-18 16:14:44 发布