次の点に注意してください。
function array_map(array, callback) {
for (var i = 0; i < array.length; i += 1) {
callback(array[i]);
}
}
var a = [], b = [];
array_map([1, 2, 3], function (x) { a.push(x); });
// just gives a = [1, 2, 3] as expected
// but why does this not work: ?
array_map([1, 2, 3], b.push);
// Chrome: a = [], Firefox: can't convert undefined to object
これが発生する理由を理解しています。つまり、直接に渡すと、(グローバルオブジェクトでpush
はなく)バインドされなくなります。Chromeでエラーが発生しない理由はよくわかりませんが、少なくともFirefoxでは何らかのエラーが発生するようです。b
array_map
このようなバグarray_map
を回避するために、このような関数が渡されたかどうかをどのように検出できますか?
関数の原点を追跡するために利用できる高度な反射技術があることを望んでいます。たとえば、b.push.constructor
を与えますがFunction
、それは私が探しているものではありません。