将属性引用从一个类传递到另一个类

时间:2017-02-03 16:04:03

标签: javascript ecmascript-6

说我有2个课程AuthClient。如果我有一个属性Auth.token,我希望能够将该属性作为参考传递给Client.token,这样当我更改Auth.token时,它也会更改Client.token的值

这是一个目前无效的简化示例..

class Auth {
  constructor() {
    this._token = '123';
  }
  get token() {
    return this._token;
  }
  updateToken(newToken) {
    this._token = newToken;
  }
}

class Client {
  constructor(token) {
    this._token = token;
  }
  fetch() {
    console.log(this._token);
  }
}

const auth = new Auth();
const client = new Client(auth.token);
client.fetch();
auth.updateToken('abc');
client.fetch();

2 个答案:

答案 0 :(得分:4)

您可以将Auth个实例传递到Client个实例,然后通过token访问Auth。这样可以确保Auth._token的更新会影响Client

class Auth {
  constructor() {
    this._token = '123';
  }
  get token() {
    return this._token;
  }
  updateToken(newToken) {
    this._token = newToken;
  }
}

class Client {
  constructor(auth) {
    this._auth = auth;
  }
  fetch() {
    console.log(this._auth.token);
  }
}

const auth = new Auth();
const client = new Client(auth);
client.fetch();
auth.updateToken('abc');
client.fetch();

答案 1 :(得分:1)

制作全局变量将是实现这一目标的一种方式。然后,您只需通过Auth更新令牌。

let token = ''

class Auth {
  constructor() {
    token = '123';
  }
  get token() {
    return token;
  }
  updateToken(newToken) {
    token = newToken;
  }
}

class Client {
  fetch() {
    console.log(token);
  }
}

const auth = new Auth();
const client = new Client();
client.fetch();
auth.updateToken('abc');
client.fetch();