2017-02-03 178 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();

相關問題