new 与构造函数, instanceof 与实例

2023-10-29
2分钟阅读时长

new 关键字

在 JavaScript 中,new 关键字用于创建对象的实例。使用 new 运算符时,它会执行以下四个主要步骤:

  • 创建一个空对象:首先,new 运算符会创建一个空的普通 JavaScript 对象。这个新对象将被用作将要创建的对象实例。

  • 设置原型链关联:接下来,新创建的对象会被关联到它的构造函数的原型上。这是通过将新对象的 [[Prototype]] 内部属性(也可以通过 Object.setPrototypeOf() 或 proto 属性进行设置)设置为构造函数的 prototype 属性来完成的。这样一来,新对象就可以继承构造函数原型上的属性和方法。

  • 执行构造函数代码:然后,new 运算符会调用构造函数,并将新创建的对象作为构造函数的上下文(即 this 关键字)传递给它。这允许构造函数在执行过程中操作新对象,给新对象添加属性和方法。

  • 返回新对象:如果构造函数没有显式返回一个对象,则 new 表达式将隐式返回新创建的对象实例。如果构造函数返回一个非对象类型的值(如基本数据类型或 null),则 new 表达式仍然返回新创建的对象。

构造函数

构造函数是一个用于创建和初始化对象的特殊函数。构造函数与普通函数的区别在于,构造函数使用 new 关键字来调用,而普通函数则直接调用。构造函数通常用于定义一个类(或者说是对象类型),并在创建对象时初始化该类的属性和方法。

下面是一个简单的构造函数示例:

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

// 使用构造函数创建对象实例
var person1 = new Person("Alice", 25);
var person2 = new Person("Bob", 30);

console.log(person1.name); // 输出 "Alice"
console.log(person2.age); // 输出 30

在上面的例子中,Person 是一个构造函数,它接受两个参数 name 和 age,并将它们赋值给新创建的对象的属性。

new 关键字用于调用构造函数,并创建一个对象实例。在调用构造函数时,会创建一个空的对象,然后将该对象作为 this 关键字的值传递给构造函数。构造函数可以通过 this 来访问和修改新创建的对象的属性和方法。

instanceof 运算符

instanceof 运算符用于检查一个对象是否是某个类的实例。它的语法是 object instanceof constructor,其中 object 是要检查的对象,constructor 是要检查的构造函数或类。

下面是一个使用 instanceof 运算符的示例:

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

var person = new Person("Alice", 25);

console.log(person instanceof Person); // 输出 true
console.log(person instanceof Object); // 输出 true,所有对象都是 Object 的实例

在上面的例子中,通过 person instanceof Person 可以判断 person 是否是 Person 类的实例。而 person instanceof Object 则可以判断 person 是否是 Object 类的实例(所有对象都是 Object 类的实例)。