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)("张培跃","http://www.zhangpeiyue.com");
console.log(obj);// { siteName: '张培跃', siteUrl: 'http://www.zhangpeiyue.com' }
网友评论