gpt4 book ai didi

javascript - 将原型(prototype)B的所有方法和属性赋值给原型(prototype)A?

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:37 24 4
gpt4 key购买 nike

我有一个类 A,它是类 B 的一个子集。它共享类 B 的许多属性和方法。

虽然 A 类缺乏实现。所以我希望 B 类中的所有功能都进入 A 类。

ClassA.prototype = ClassB.prototype;

ClassA.prototype += ClassB.prototype

但看来我必须:

ClassA.prototype.methodA = ClassB.prototype.methodA
ClassA.prototype.methodB = ClassB.prototype.methodB
ClassA.prototype.methodC = ClassB.prototype.methodC
ClassA.prototype.methodD = ClassB.prototype.methodD

对于每一个方法和属性。有没有办法立即将 B 中的实现放入 A 中?

最佳答案

的确,您不能覆盖通过 class 语法创建的函数的 prototype 属性,因为它是只读的且不可配置的。如果您使用 function 语法代替 Fullstack Guy points out 就可以做到这一点.

但你可能想要制作 ClassA extend ClassB:

class ClassA extends ClassB {
// ...
}

实例:

class ClassB {
methodA() {
console.log("methodA");
}
methodB() {
console.log("methodB");
}
methodC() {
console.log("methodC");
}
methodD() {
console.log("methodD");
}
}
class ClassA extends ClassB {
// ...
}
new ClassA().methodA();

但是,如果没有,您可以使用循环复制所有方法:

for (const name of Object.getOwnPropertyNames(ClassB.prototype)) {
const method = ClassB.prototype[name];
if (typeof method === "function") {
ClassA.prototype[name] = ClassB.prototype[name];
}
}

实例:

class ClassB {
methodA() {
console.log("methodA");
}
methodB() {
console.log("methodB");
}
methodC() {
console.log("methodC");
}
methodD() {
console.log("methodD");
}
}
class ClassA {
// ...
}
for (const name of Object.getOwnPropertyNames(ClassB.prototype)) {
const method = ClassB.prototype[name];
if (typeof method === "function") {
ClassA.prototype[name] = ClassB.prototype[name];
}
}
new ClassA().methodA();

但是要注意,如果ClassB是一个子类,方法中的super会继续访问ClassB的父类(super class)方法,它不会' t 要么无效,要么访问 ClassA 的父类(super class)方法。

关于javascript - 将原型(prototype)B的所有方法和属性赋值给原型(prototype)A?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57754699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com