在 JavaScript 中,理解对象关系和类型检查对于有效编程至关重要。 instanceof和isPrototypeOf()这两种方法有助于进行这些检查。 虽然这两种方法都用于确定 JavaScript 中的类型或原型关系,但它们的操作方式不同,适用于不同的场景。
下面我们将讨论这两个主题:
什么是 instanceof?
JavaScript 中的 instanceof 运算符用于检查对象是否属于特定类或构造函数。 如果对象是指定类或构造函数的实例,则返回 true,否则返回 false。
特征:
类型检查:确定对象是否是特定类或构造函数的实例。
操作符:instanceof
使用方法:object instanceof Class
返回值:Boolean
应用:
在运行时检查对象类型,
确保与预期的对象原型兼容。
示例:该示例展示了 instanceof 运算符的使用:
class Vehicle { } class Car extends Vehicle { } let car = new Car(); console.log(car instanceof Car); console.log(car instanceof Vehicle); console.log(car instanceof Object);
输出:
true true true
什么是 isPrototypeOf()?
isPrototypeOf() 方法检查另一个对象的原型链中是否存在某个对象。 如果指定对象在调用该方法的对象的原型链中,则返回 true,否则返回 false。
特性:
原型链检查: 验证一个对象是否存在于另一个对象的原型链中。
方法:isPrototypeOf()
使用方法:prototypeObject.isPrototypeOf(object)
返回:Boolean
应用:
验证继承关系。
检查一个对象是否继承了另一个对象的属性和方法。
示例: 本例展示了 isPrototypeOf() 方法的使用:
function Animal() { } function Dog() { } Dog.prototype = Object.create(Animal.prototype); let dog = new Dog(); console.log(Animal.prototype.isPrototypeOf(dog)); console.log(Object.prototype.isPrototypeOf(dog)); console.log(Dog.prototype.isPrototypeOf(dog));
输出:
true true true
instanceof 和 isPrototypeOf() 的区别:
特征 |
instanceof |
isPrototypeOf() |
---|---|---|
类型检查 |
检查对象是否是特定类或构造函数的实例 |
检查一个对象是否存在于另一个对象的原型链中 |
句法 |
The object instanceof Class |
The prototypeObject.isPrototypeOf(object) |
返回 |
boolean |
boolean |
用法 |
与类或构造函数一起使用 |
与原型对象一起使用 |
应用 |
运行时类型检查确定对象类型 |
检查原型链来验证继承关系 |