Object.create和new区别

2023-10-20 18:45:59 浏览数 (1)

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创建的新函数并没有继承构造函数的属性和方法,只继承了原型方法和原型属性

0 人点赞