new 构造函数的执行流程:
- 创建对象,并给予属性名为
__proto__
,值为构造函数原型(prototype
)的属性。 - 将构造函数的
this
指向为刚创建的对象。 - 执行构造函数的语句。
- 将创建的对象进行返回。
function myNew (fun) {
return function () {
// 创建一个新对象且将其隐式原型指向构造函数原型
let obj = {
__proto__ : fun.prototype
}
// 执行构造函数
fun.call(obj, ...arguments);
// 返回该对象
return obj;
}
}
function Site(siteName, siteUrl) {
this.siteName = siteName;
this.siteUrl = siteUrl;
}
let obj = myNew(Site)("高先生的猫","https://blog.csdn.net/z591102");
console.log(obj);// { siteName: '高先生的猫', siteUrl: 'https://blog.csdn.net/z591102' }