在 ES8 中,引入了一个新的方法 Object.getPrototypeOf(),它可以用来获取一个对象的原型。这个方法在前端开发中非常有用,因为我们经常需要通过原型链来访问对象的属性和方法。
什么是原型链?
在 JavaScript 中,每个对象都有一个原型,它是一个指向另一个对象的引用。如果一个对象没有指定原型,那么它的原型就是 Object.prototype。当我们访问一个对象的属性或方法时,如果这个对象本身没有这个属性或方法,就会沿着原型链向上查找,直到找到为止。
例如,我们有一个对象 person:
const person = {
name: "Alice",
age: 30,
sayHello() {
console.log("Hello, my name is " + this.name);
}
};我们可以通过 person.sayHello() 来调用它的 sayHello 方法。如果我们尝试访问 person 的一个不存在的属性,例如 person.address,那么 JavaScript 就会沿着原型链向上查找,直到找到 Object.prototype。如果 Object.prototype 也没有这个属性,那么就会返回 undefined。
Object.getPrototypeOf() 方法的用法
Object.getPrototypeOf() 方法可以用来获取一个对象的原型。它的语法非常简单:
Object.getPrototypeOf(obj)
其中 obj 是要获取原型的对象。这个方法会返回 obj 的原型,如果 obj 没有原型,就返回 null。
例如,我们可以使用 Object.getPrototypeOf() 来获取 person 的原型:
// www.javascriptcn.com code example
const person = {
name: "Alice",
age: 30,
sayHello() {
console.log("Hello, my name is " + this.name);
}
};
const proto = Object.getPrototypeOf(person);
console.log(proto); // 输出 {},即 Object.prototype在这个例子中,我们获取到了 person 的原型,它是一个空的对象 {},即 Object.prototype。
Object.getPrototypeOf() 方法的指导意义
Object.getPrototypeOf() 方法的主要作用是让我们能够更好地理解 JavaScript 中的原型链机制。它可以让我们快速地获取一个对象的原型,从而更好地理解对象的属性和方法是如何继承的。
同时,Object.getPrototypeOf() 方法也可以用来检查一个对象是否是某个类的实例。例如,我们可以使用这个方法来检查一个对象是否是数组:
const arr = [1, 2, 3]; console.log(Object.getPrototypeOf(arr) === Array.prototype); // 输出 true
在这个例子中,我们使用 Object.getPrototypeOf() 来获取 arr 的原型,然后判断它是否等于 Array.prototype。如果相等,说明 arr 是一个数组。
示例代码
下面是一个使用 Object.getPrototypeOf() 方法的示例代码,它演示了一个简单的类继承的例子:
// www.javascriptcn.com code example
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + " makes a noise.");
}
}
class Dog extends Animal {
constructor(name) {
super(name);
}
speak() {
console.log(this.name + " barks.");
}
}
const d = new Dog("Mitzie");
console.log(Object.getPrototypeOf(d) === Dog.prototype); // 输出 true
console.log(Object.getPrototypeOf(Object.getPrototypeOf(d)) === Animal.prototype); // 输出 true
d.speak(); // 输出 "Mitzie barks."在这个例子中,我们定义了一个 Animal 类和一个 Dog 类,Dog 类继承自 Animal 类。我们创建了一个 Dog 实例 d,并使用 Object.getPrototypeOf() 方法来检查它的原型,以及它的原型的原型。最后,我们调用 d 的 speak() 方法,它会输出 "Mitzie barks."。
这个例子展示了 Object.getPrototypeOf() 方法的用法,同时也演示了类继承的基本用法。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d164d3a941bf71342f6e83