Как выставить методы объекта свойства так, как если бы они были объектами собственных методов?JavaScript - PullRequest
0 голосов
/ 27 декабря 2018

У меня действительно сильное желание сделать что-то вроде этого:

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?Мне нужно сделать это для каждого метода свойства, независимо от номера и имени.

ПРИМЕЧАНИЕ. Я не могу использовать наследование.

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Я бы попробовал реализовать 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 .

0 голосов
/ 27 декабря 2018

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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...