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

时间:2018-12-26 21:16:20

标签: javascript object

我非常想做这样的事情:

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 :(得分: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上对其进行详细阅读。