如何公开属性对象的方法,就好像它们是对象自己的方法一样?JavaScript



我非常想做这样的事情:

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上阅读更多内容。

最新更新