練炭ブログ

萌え壁紙、Irvine、DMonkey、Proxomitron などの情報を扱ってます。

DMonkey: .call()/.apply() の問題点

コメントなし»
// このような関数を
Array.prototype.map = function (callback) {
  ~
};

// このように呼び出すと
Array.prototype.map.call ('foo', function (x) { ~ });

// 以降、map が勝手に fcfCall モードで動作してしまう
var a = [ ~ ].map (function (x) { ~ });

ただ、組み込みメソッドは .call.apply にアクセスしようとするとエラーになるので、DMonkey では「普通の呼び出し方でも .call() または .apply() でも使える」というメソッドはまず見かけません。

今回の例のようにポリフィルを実装するなら、.call.apply は使えないと説明しておけばよいと思います。

var s = new String ('foo');
s.map = Array.prototype.map;

のような呼び出し方であれば問題ないはずです。

なお、関数オブジェクトを this に割り当てようとすると Global に差し替えられるようです(詳細は未調査)。

今回の記事は勢いで書いたのでどこか間違いがあるかも知れないのでご注意下さい。

コメントを残す

メールアドレスが公開されることはありません。