2012-05-25 10 views
2

Вот мой тестовый код (для запуска с помощью node --harmony-proxies foo.js:ES6 прокси не могут перехватывать индексы массива

var a = Proxy.create({ 
    get : function (proxy, prop) 
    { 
     return 5 
    } 
}) 


console.log(a['foo']) 
console.log(a.length) 
console.log(a['10']) 
console.log(a[10]) 

Почему последние 2 строки не напечатать 5, почему прокси-сервер не удается перехватить свойства похожий целых чисел? это ошибка реализации или как она указана? Есть ли отдельный способ перехвата индексов массивов, чтобы я мог реализовать свои собственные массивы (например, разреженные массивы)?

+0

Это было бы ошибкой. Какая версия узла это, и на какой версии V8 она основана? –

+0

Это происходит в 0.6.15 и 0.6.18, я не знаю о v8. – nponeccop

+0

Ваш пример хорошо работает на моем NodeJS v0.8.14, установленном с NVM. –

ответ

1

Если я правильно прочитал строки изменений, то узел 0.6. 18 по-прежнему работает на V8 3.6.6, который является довольно старой версией (с октября 2011 г.). В этой версии поддержка прокси-серверов все еще работала в prog ress (как другие поддерживаемые функции Harmony). Не ожидайте, что прокси будут функционировать должным образом перед V8 3.8 (с декабря 2011 года). К сожалению, я не могу сказать вам, когда стабильная версия узла будет обновляться дальше.

1

Как отметил А. Росберг, эта ошибка (и несколько других шоустопперов) фиксирована в V8 3.8 (узел 0.7.x довольно стабилен и 0.8.x близок к выпуску). Если вы работаете с прокси-серверами, все-таки есть некоторые ошибки, за которые вам придется следить. Этот вопрос github имеет довольно хороший краткий обзор: https://github.com/tvcutsem/harmony-reflect/issues/4