Прокси ES6 не может перехватывать индексы массива

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

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, почему прокси-сервер не может перехватывать свойства, похожие на целые числа? Это ошибка реализации или как это указано? Есть ли отдельный способ перехвата индексов массивов, чтобы я мог реализовать свои собственные массивы (например, разреженные массивы)?

2 ответа

Решение

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

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

Другие вопросы по тегам