Object.create
Object.create
是创建一个新对象,使用现有的对象来提供新创建对象的_proto_
。意思就是生成一个新对象,该新对象的_proto_
指向现有对象
原理如下图所示:
代码语言:javascript复制Object.prototype.create = function (proto) {
function F() {}
F.prototype = proto;
return new F();
};
new
new
生成的是构造函数的一个实例,实例继承了构造函数及其prototype
上的属性和方法
原理如下图所示:
代码语言:javascript复制var o = new Object(); // 创建一个空对象
Object.setPrototypeOf(o, Foo.prototype); // 绑定原型链
Foo.call(o);
区别
通过上面代码,我们可以得出以下区别:
create | new |
---|---|
创建函数 | 创建空对象 |
无 | 显示调用父类 |
代码实现如下:
代码语言:javascript复制function Foo() {
this.name = '123';
}
Foo.prototype.sayName = function () {
console.log(this.name);
};
var s1 = new Foo();
var s2 = Object.create(Foo.prototype);
结果如下:
两者不同在于,Object.create
创建的新函数并没有继承构造函数的属性和方法,只继承了原型方法和原型属性