function _new (Fn, ...args) {
const _this = Object.create(Fn.prototype);
const res = Fn.apply(_this, args);
return (res instanceof Object) ? res : _this;
}
new 操作符调用构造函数,并创建一个对象,包含构造函数属性和方法以及构造函数原型链上共享的属性和方法;
Object.create() 实现
Object.create = (obj, properties) => {
let F = new Function();
F.prototype = obj; // 以 obj 作为 F 构造函数的原型对象
if (properties) {
Object.defineProperties(F, properties);
}
return new F();
}
参考文章:
new 操作符实现
new 操作符调用构造函数,并创建一个对象,包含构造函数属性和方法以及构造函数原型链上共享的属性和方法;
Object.create() 实现
Object.create(obj, pro)
方法将传递的参数 obj 作为原型对象,创建并返回一个新的对象 (可看作是传入参数对象的一个副本拷贝),新创建的对象对应的原型对象为 obj。区别
new
和Object.create()
最终目的都是为了创建一个对象,但是它们的实现存在一定差异:new
调用的是构造函数;Object.create()
调用对象类型来创建新的对象。new
创建的对象,挂载了构造函数的所有属性和方法,并且可以向上访问到构造函数原型链上共享的一些属性和方法;Object.create()
创建的对象,本质上是参数对象的一个副本。