new 与构造函数, instanceof 与实例
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 类的实例)。