2016-11-24 2 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 это не * мой * Прокси класс, это [ES2015 прокси] (https://babeljs.io/docs/learn-es2015/#proxies) – Marvin

+0

'инфраструктура. devices.get ('foo') 'что ожидают этого возврата? – Searching

+0

Он должен возвращать 'bar'. См. [Карта] (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()', но и всем методам «Карта». – Marvin

Смежные вопросы