跳到主要内容

JavaScript 对象 isPrototypeOf() 方法

Object.isPrototypeOf() 方法用于检查一个对象是否存在于另一个对象的原型链中。

示例

let obj = new Object();

// 检查 obj 的原型是否与
// Object 数据类型的原型相同
console.log(Object.prototype.isPrototypeOf(obj));

// 输出:true

isPrototypeOf() 语法

isPrototypeOf() 方法的语法为:

prototypeObj.isPrototypeOf(obj);

这里,prototypeObj 指的是我们想要与所选对象的原型(obj)进行比较的对象。

由于 isPrototypeOf() 是一个静态方法,我们需要使用类名 Object 来访问该方法。

isPrototypeOf() 参数

isPrototypeOf() 方法接受以下参数:

  • obj - 将要检查其原型链的对象

isPrototypeOf() 返回值

isPrototypeOf() 方法返回:

  • true - 如果 prototypeObj 是 obj 的原型
  • false - 如果 prototypeObj 不是 obj 的原型,或者 obj 本身不是对象

注意: isPrototypeOf()instanceof 运算符不同,因为它检查 obj 的原型链是否与 prototypeObj 匹配,而不是 prototypeObj.prototype

示例 1:JavaScript 对象的 isPrototypeOf()

// 创建一个新的 Object 实例
let obj = new Object();

// 检查 obj 的原型
// 是否与 Object.prototype 相同
console.log(Object.prototype.isPrototypeOf(obj));

// 输出:true

// 检查 toString 方法的原型
// 是否与 Function.prototype 相同
console.log(Function.prototype.isPrototypeOf(obj.toString));

// 输出:true

// 检查数组 [2, 4, 8]
// 是否与 Array.prototype 相同
console.log(Array.prototype.isPrototypeOf([2, 4, 8]));

// 输出:true

在上述示例中,我们使用 isPrototype() 方法检查了以下原型:

  • obj - 一个对象
  • obj.toString - 返回 obj 字符串表示的函数
  • [2, 4, 8] - 一个整数数组

由于 Object.prototype 是所有对象的根原型,因此在检查 Object.prototype 与 obj 时我们得到 true 的输出。

类似地,

  • Function.prototype 是所有函数的原型,包括 obj.toString
  • Function.prototype 是所有数组的原型,包括 [2, 4, 8]

示例 2:使用自定义对象的 isPrototypeOf()

// 定义一个对象
let Animal = {
makeSound() {
console.log(`${this.name}, ${this.sound}!`);
},
};

// 函数用于创建一个新对象
function Dog(name) {
this.name = name;
this.sound = "bark";

// 使用 setPrototypeOf() 设置原型
Object.setPrototypeOf(this, Animal);
}

// 创建一个新对象
const dog1 = new Dog("Marcus");

// 检查 dog1 的原型是否为 Animal 对象
console.log(Animal.isPrototypeOf(dog1));

// 输出:true

在上述示例中,我们创建了两个对象:Animal 和 dog1。注意 dog1 对象是使用 Dog() 构造函数创建的。

使用 setPrototypeOf() 方法,我们将从 Dog() 构造函数创建的所有对象的原型设置为 Animal 的原型。

因此,当检查 Animal 对象是否是 dog1 的原型时,我们得到 true 的输出。

推荐阅读: