
JavaScript instanceof 运算符
您将学习如何使用 JavaScript instanceof 运算符来确定构造函数的原型是否在对象的原型链
在本教程中,您将学习如何使用 JavaScript instanceof 运算符来确定构造函数的原型是否在对象的原型链。
JavaScript instanceof 操作符介绍
如果构造函数的原型 (constructor.prototype) 出现在对象的原型链中,则 instanceof 运算符返回 true。
下面显示 instanceof 运算符的语法:
object instanceof contructor在这个语法中:
object是要测试的对象。constructor是一个用来测试的函数。
JavaScript instanceof 运算符示例
以下示例定义 Person 类型并使用 instanceof 运算符检查对象是否是 Person 类型的实例:
function Person(name) {
this.name = name;
}
let p1 = new Person('John');
console.log(p1 instanceof Person); // true怎么运行的。
首先,使用构造函数模式定义一个类型 Person:
function Person(name) {
this.name = name;
}其次,创建 Person 类型对象 p1:
let p1 = new Person('John Doe');第三,检查 p1 是否是 Person 类型的实例:
console.log(p1 instanceof Person); // true
它返回 true,因为 Person.prototype 出现在 p1 对象的原型链。 p1 的原型链是 p1、Person.prototype 和 Object.prototype 之间的链接:
以下也返回 true,因为 Object.prototype 出现在 p1 对象的原型链:
console.log(p1 instanceof Object); // trueES6 类和 instanceof 运算符
以下示例定义 Person 类并使用 instanceof 运算符检查对象是否是 Person 类的实例:
class Person {
constructor(name) {
this.name = name;
}
}
let p1 = new Person('John');
console.log(p1 instanceof Person); // true
怎么运行的。
首先,定义 Person 类:
class Person {
constructor(name) {
this.name = name;
}
}其次,创建 Person 类的实例:
let p1 = new Person('John');第三,检查p1是否是 Person 类的实例:
console.log(p1 instanceof Person); // trueinstanceof 运算符和继承
以下示例定义Employee 类并继承 Person 类:
class Person {
constructor(name) {
this.name = name;
}
}
class Employee extends Person {
constructor(name, title) {
super(name);
this.title = title;
}
}
let e1 = new Employee();
console.log(e1 instanceof Employee); // true
console.log(e1 instanceof Person); // true
console.log(e1 instanceof Object); // true由于 e1 是 Employee 类的一个实例,它也是类 Person 和 Object 类的一个实例。
Symbol.hasInstance
在 ES6 ,instanceof 运算符使用 Symbol.hasInstance 函数来检查关系。 Symbol.hasInstance() 接受一个对象参数,如果对象作为该类实例时返回 true。 例如:
class Person {
constructor(name) {
this.name = name;
}
}
let p1 = new Person('John');
console.log(Person[Symbol.hasInstance](p1)); // true由于 Symbol.hasInstance 是在 Function 原型定义的,因此默认情况下它在所有函数和类可用。
您可以将子类的 Symbol.hasInstance 重新定义为静态方法。例如:
class Person {
constructor(name) {
this.name = name;
}
}
class Android extends Person {
static [Symbol.hasInstance]() {
return false;
}
}
let a1 = new Android('Sonny');
console.log(a1 instanceof Android); // false
console.log(a1 instanceof Person); // false结论
- 使用
instanceof运算符检查constructor.protoype是否在对象的原型链。












