我非常想做这样的事情:
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
自己的方法一样?我需要为属性的每个方法执行此操作,无论数字和名称如何。
注意:我不能使用继承。
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());
我会尝试将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上阅读更多内容。