У меня есть следующий прокси:
const p = new Proxy({
[Symbol.iterator]: Array.prototype.values,
forEach: Array.prototype.forEach,
}, {
get(target, property) {
if (property === '0') return 'one';
if (property === '1') return 'two';
if (property === 'length') return 2;
return Reflect.get(target, property);
},
});
Это массивоподобный объект, поскольку он имеет числовые свойства и свойство length
, указывающее количество элементов. Я могу повторить это с помощью цикла for...of
:
for (const element of p) {
console.log(element); // logs 'one' and 'two'
}
Однако метод forEach()
не работает.
p.forEach(element => console.log(element));
Этот код ничего не регистрирует. Функция обратного вызова никогда не вызывается. Почему он не работает и как это исправить?
Фрагмент кода:
const p = new Proxy({
[Symbol.iterator]: Array.prototype.values,
forEach: Array.prototype.forEach,
}, {
get(target, property) {
if (property === '0') return 'one';
if (property === '1') return 'two';
if (property === 'length') return 2;
return Reflect.get(target, property);
},
});
console.log('for...of loop:');
for (const element of p) {
console.log(element);
}
console.log('forEach():');
p.forEach(element => console.log(element));
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.16.0/polyfill.min.js"></script>