2016-11-24 55 views
0

我堅持下面的一段代碼得到一個地圖的代理時:不兼容的接收機從吸氣

class Infrastructure { 
 
    constructor() { 
 
    this._devices = new Map([ 
 
    \t ['foo', 'bar'] 
 
    ]) 
 
    } 
 
    
 
    get devices() { 
 
    return new Proxy(this._devices, {}) 
 
    } 
 
} 
 

 
const infrastructure = new Infrastructure() 
 
console.log(infrastructure.devices.get('foo'))

哪個失敗,出現以下錯誤:

Method Map.prototype.get called on incompatible receiver

我知道我需要在某個地方綁定某些東西,但我不得不承認我有點失落。

感謝您的幫助!

+0

@Sreekanth這不是我的* * Proxy類,它的[ES2015代理(https://babeljs.io/docs/learn-es2015/#proxies) – Marvin

+0

'基礎設施。 devices.get('foo')'期望這個回報是什麼? – Searching

+0

它應該返回'bar'。請參閱[Map](https://babeljs.io/docs/learn-es2015/#map-set-weak-map-weak-set) – Marvin

回答

0

這會解決問題。一旦我有具體的解釋,將會更新。

class Infrastructure { 
 
    constructor() { 
 
    this._devices = new Map([ 
 
     ['foo', 'bar'] 
 
    ]) 
 
    } 
 

 
    get devices() { 
 
    return new Proxy(this._devices, {}) 
 
    } 
 
}; 
 

 
const infrastructure = new Infrastructure() 
 
console.log(infrastructure.devices.get.bind(infrastructure._devices)('foo'))

+0

我對綁定到內部「私有」屬性的想法感到不舒服。可能有辦法通過代理服務器來獲得自然的API(就像原始的Map對象一樣)...我不僅要訪問get(),還要訪問整個Map方法。 – Marvin