📅  最后修改于: 2023-12-03 15:11:52.914000             🧑  作者: Mango
在 JavaScript 中,我们可以通过继承来扩展一个类的功能。但是,在某些情况下,我们可能需要访问父类的属性或方法。本文将向您介绍如何在 JavaScript 中获取父类。
要获取父类属性,我们可以使用 Object.getPrototypeOf()
方法。该方法返回指定对象的原型(即其父类)。
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise.`);
}
}
class Dog extends Animal {
constructor(name, breed) {
super(name);
this.breed = breed;
}
speak() {
console.log(`${this.name} barks.`);
super.speak(); // 调用父类的 speak 方法
}
}
let d = new Dog('Mitzie', 'Labrador Retriever');
console.log(Object.getPrototypeOf(d)); // 输出:Animal {}
在上面的例子中,我们通过 super
关键字调用了父类 speak()
方法。这将输出:
Mitzie barks.
Mitzie makes a noise.
要获取父类方法,我们可以使用 Object.getPrototypeOf()
方法和 Object.getOwnPropertyDescriptor()
方法。前者返回指定对象的原型,后者返回指定对象的属性描述符。我们使用这两个方法来获取不能被继承的方法。
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise.`);
}
}
class Dog extends Animal {
constructor(name, breed) {
super(name);
this.breed = breed;
}
speak() {
console.log(`${this.name} barks.`);
let descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Dog.prototype), 'speak');
descriptor.value.call(this); // 调用父类的 speak 方法
}
}
let d = new Dog('Mitzie', 'Labrador Retriever');
d.speak(); // 输出:Mitzie barks. Mitzie makes a noise.
在上面的例子中,我们通过 Object.getOwnPropertyDescriptor()
方法获取了父类 speak()
方法的描述符,并通过 call()
方法将其作为当前对象调用。
在 JavaScript 中获取父类的方法和属性是一个有用而且经常用到的操作。我们可以使用 Object.getPrototypeOf()
方法和 Object.getOwnPropertyDescriptor()
方法来实现这个操作,无论是可以被继承的方法还是不可被继承的方法都可以获取到。