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
的输出。
推荐阅读: