我非常想做这样的事情:
class A {
constructor(){}
age() { return 15; }
}
class B {
constructor() {
this.a = new A();
// DO SOMETHING THAT THIS IS POSSIBLE:
}
}
B b = new B();
b.age();
如何像对象b
自己的方法一样公开该方法?我需要对属性的每种方法执行此操作,而不管其数量和名称如何。
注意:我不能使用继承。
答案 0 :(得分:3)
extends
提供继承功能:
class A {
constructor(){}
age() { return 15; }
}
class B extends A {
constructor() {
super()
}
}
const b = new B();
console.log(b.age());
我很想了解为什么您不能使用普通继承。这是一种从基类手动继承的方法:
class A {
constructor(){}
age() { return 15; }
}
class B {
constructor() {
Object.getOwnPropertyNames(A.prototype).forEach(prop => {
if (prop !== 'constructor') {
this[prop] = A.prototype[prop];
}
});
}
}
const b = new B();
console.log(b.age());
答案 1 :(得分:3)
我会尝试将B
实现为Proxy
。
class A {
constructor(){}
age() { return 15; }
}
const b = new Proxy(new A(), {
get: function(object, property) {
if (typeof object[property] === 'function') {
return object.property();
}
}
set: function(object, property) {}
}
您可以在MDN上对其进行详细阅读。