返回

JavaScript 的 new 与 Object.create() -- 揭开 JavaScript 类的奥秘

前端

JavaScript 中的类和继承

在 JavaScript 中,类是一种语法糖,它允许您使用一种更简洁的方式来定义对象。类的本质上只是一个特殊的函数,它可以创建具有相同属性和方法的对象。

JavaScript 中的继承机制是基于原型的。每个对象都有一个内部属性 [[Prototype]],它指向其原型对象。原型对象又可能有自己的原型对象,如此递归下去,最终到达 null。当一个对象访问一个不存在的属性或方法时,JavaScript 会沿着原型链向上查找,直到找到该属性或方法为止。

new 操作符

new 操作符用于创建一个新的对象实例。它首先创建一个新的空对象,然后将这个空对象作为参数调用构造函数。构造函数将在新对象上设置属性和方法。

function Person(name) {
  this.name = name;
}

const person1 = new Person('John');
console.log(person1.name); // 'John'

Object.create() 方法

Object.create() 方法用于创建一个新的对象,并将该对象指定为另一个对象的原型。

const personProto = {
  getName: function() {
    return this.name;
  }
};

const person1 = Object.create(personProto);
person1.name = 'John';
console.log(person1.getName()); // 'John'

new 操作符和 Object.create() 方法的比较

new 操作符和 Object.create() 方法都是用于创建对象的工具,但它们在实现原理和使用场景上有一些区别。

特性 new 操作符 Object.create() 方法
实现原理 创建一个新的对象实例,然后将这个空对象作为参数调用构造函数 创建一个新的对象,并将该对象指定为另一个对象的原型
使用场景 创建一个新对象,并希望该对象继承构造函数的属性和方法 创建一个新对象,并希望该对象继承另一个对象的属性和方法
性能 速度较快 速度较慢
灵活性 较灵活,可以自定义构造函数 较不灵活,只能继承另一个对象

结语

new 操作符和 Object.create() 方法都是 JavaScript 中用于创建对象的工具,但它们在实现原理和使用场景上有一些区别。在实际开发中,您可以根据具体的需求选择合适的方法来创建对象。