すべての にプロトタイプを追加するのは簡単ですFunction
:
Function.prototype.foo = function () { return 'bar'; };
(new Function).foo(); // 'bar'
ただし、グローバル オブジェクトのプロトタイプに何かを割り当てることも悪い習慣です。これは、クロス モジュール オブジェクトの依存関係が原因であり、部分的には以前のバージョンのプロトタイプ.js の終焉につながります。
すべての関数に method を持たせたいとしfoo
ます。私はこれに似たようなことをします:
(function () {
var Fn = Function;
Fn.prototype.foo = function () { return 'bar'; };
(new Fn).foo(); // 'bar'
}());
(new Function).foo() // also 'bar'. this is bad!
残念ながら、これはFunction
のプロトタイプにも影響します。これは、 Function が参照によってスコープされているためです。
プリミティブ値をIIFEに渡すための通常の「値のコピー」アプローチも、Function
それ自体がオブジェクトであるため失敗します。
(function (Fn) {
Fn.prototype.foo = function () { return 'bar'; };
(new Fn).foo(); // 'bar'
}(Function));
Function.foo // function () { return 'bar'; }
これらの例を考えると、私の範囲外の他のすべての関数に影響を与えずに、選択した関数のプロトタイプを拡張することは不可能であるというのは本当ですか?