2017-02-03 179 views
1

假设我有两个类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(); 
+0

也许事件发射器像这可能工作https://github.com/Olical/EventEmitter – macksol

回答

4

你可以通过你的Auth例如Auth传递给你的Client实例和访问token。这将确保更新到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

一些有趣的答案,但我像这样最好。这很简单,意味着我不必拥有一个全球性的。谢谢! – SimonTheEngineer

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();

相关问题