Вы все упускаете суть. : -)
Мы хотим вызвать метод (не функцию) для всех элементов массива. Вы можете использовать map
:
a.map(function(x){x.frob()})
но это слишком много печатать. Мы хотим сказать:
a.mapm(A.frob)
где A
- это класс элементов a
, а mapm
- это новый метод Array
, который вызывает свой метод аргумента для каждого элемента this
(в данном случае массив a
). Вы можете определить mapm
так:
Array.prototype.mapm = function (method)
{
return this.map(function (x) { return method.apply(x) } )
};
и назовите его так:
["a", "b", "c"].mapm("".toUpperCase) ==> ["A", "B", "C"]
Единственная проблема заключается в том, что вы добавили новый элемент mapm
в каждый массив, хотя он игнорируется большинством Array
методов, например, length
и map
.