ECMAScript 4 提案では、この機能が ES4 仕様に追加されると述べられていましたが、後の ES4 ディスカッション メーリング リストの議論で、この提案は放棄される可能性があります。
ただし、RegExp.prototype に call メソッドと apply メソッドを追加することで、同様にこれらのメソッドを実装できます。機能設計に役立つだけでなく、関数と正規表現の両方に有効なダックタイプ コードの実装も可能になります。そこで、これらのメソッドを追加しましょう。
RegExp.prototype.call = function (context, str) {
return this.exec(str);
RegExp.prototype.apply = function (context, args) {
return this.exec(args[0] ]);
}; 上記の 2 つのメソッドはコンテキスト パラメーターを完全に無視するので、null またはその他のオブジェクトをコンテキストとして送信でき、同様に通常の exec メソッドの戻り値が得られます。上記の方法を使用すると、どのような状況でも正規表現や関数を通常どおりに使用することが非常に簡単になります。これらのようないくつかの明白な例は、JavaScript 1.6 での配列の反復に役立ちます。次のフィルター、every、some、map メソッドは、ブラウザー間で実行できます。
if (!Array.prototype.filter) {
// 配列を返します。指定されたフィルター関数が true を返した場合は、既存の配列の要素を返します。
Array.prototype.filter = function (func, context) {
var results = [];
for (var i = 0; i
results.push(this[i]);
results. {
// 配列内の各要素が指定されたテスト関数を満たす場合は true を返します。
Array.prototype.every = function (func, context) {
for (var i = 0; i
グループ内の少なくとも 1 つの要素が、提供されたテスト関数を満たします。
Array.prototype.some = function (func, context) {
for (var i = 0; i
return true; の各要素は、指定された関数の戻り値を呼び出します。
Array.prototype.map = function (func, context) {
var results = [];
for (var i = 0; i
results[i ] = Func.Call (Context, this [i], i, this);
}
Return Results
}; EXEC メソッドは配列または NULL 値を返すため、正しく True と False に変換されます。上記のコードでは、["a","b","ab","ba"].filter(/^a/) のように使用できます。これは、「a」で始まるすべての値を返します: [ 「a」、「ab」]。
実際、Array.prototype.filter は Firefox に実装されています。これは、exec の間接呼び出しがこのブラウザですでに機能しているためです。ただし、フィルターに RegExp.prototype.call メソッドが追加されていない場合、ブラウザーをまたいで実行することはできません。