在js中传递类的实例并在没有新实例的情况下访问它们的方法

时间:2018-03-20 06:50:47

标签: javascript es6-class

class A{
  constructor(name){
     this[name] = name ; //to be private so i need this
     new B(this);
  }
  getName(){
    return this[name];
  }
}
class B(){
  constructor(a){
     a.getName()// I wants to be like this
  }
}

我只是想在不创建新实例的情况下调用方法。

1 个答案:

答案 0 :(得分:1)

如果要在类中创建私有数据,请使用WeakMap或闭包。 this[name]根本不是私有的,它对任何有权访问实例化对象的东西都是完全可见的。

另一个问题是,对于return this[name];getName函数的范围内没有name变量。

此外,在实例化对象本身之前,无法访问对象的类方法。

你可能想要这样的东西:

const A = (() => {
  const internals = new WeakMap();
  return class A {
    constructor(name) {
      internals.set(this, { name });
    }
    getName() {
      return internals.get(this).name;
    }
  }
})();
class B {
  constructor(a) {
    console.log(a.getName())
  }
}

const a = new A('bob');
const b = new B(a);