切换语言为:繁体

JavaScript 中 instanceof 和 isPrototypeOf() 的区别

  • 爱糖宝
  • 2024-07-18
  • 2064
  • 0
  • 0

在 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

用法

与类或构造函数一起使用

与原型对象一起使用

应用

运行时类型检查确定对象类型

检查原型链来验证继承关系



0条评论

您的电子邮件等信息不会被公开,以下所有项均必填

OK! You can skip this field.