对new关键字的描述:来自MDN
new关键字会做以下操作:
1.创建一个空的简单Javascript对象 (即{});
2.链接该对象(即设置该对象的构造函数)到另一个对象;
3.将步骤1新创建的对象作为this的上下文;
4.如果该函数没有返回对象,则返回this;
call实现不传对象:
function myNew(fn) {
// 以构造函数fn的prototype为原型 创建一个新的简单对象
let o = Object.create(fn.prototype)
// 改变fn的this指向到o,并执行fn
let k = fn.call(o);
// 如果构造函数没有返回对象,则返回o
if (typeof k === 'object') {
return k;
} else {
return o;
}
}
复制代码
apply 传递参数:
function myNew(fn, ...args) {
// 以构造函数fn的prototype为原型 创建一个新的简单对象
let o = Object.create(fn.prototype)
// 改变fn的this指向到o,并执行fn
let k = fn.apply(o, args);
// 如果构造函数没有返回对象,则返回o
if (typeof k === 'object') {
return k;
} else {
return o;
}
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END