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 つのメソッドは、コンテキスト パラメーターを完全に無視することができ、同様の通常のオブジェクトが得られます。 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 & lt; projecth; i) {
if (if i in this && func.call(context, this[i], i, this))
results.push(this[i])
}
結果を返します。 >}
if (!Array.prototype.every) {
// 配列内の各要素が提供されたテスト関数を満たす場合は true を返します。
Array.prototype.every = function (func, context) {
for (var i = 0; i
return false;
return true;
if (!Array.prototype.some) {
// true を返します。配列内の少なくとも 1 つの要素が提供されたテスト関数を満たすかどうか。
Array.prototype.some = function (func, context) {
for (var i = 0; i
true を返す;
};
if (!Array.prototype.map ) {
// 配列を返します。既存の配列の各要素は、指定された関数の戻り値を呼び出します。
Array.prototype.map = function (func, context) {
var results = [];
for (var i = 0; i
results[i] = func.call(context, this[i], i, this);
}
は結果を返します。 exec メソッド true および false への適切な型変換を行って、配列または null 値を返します。上記のコードでは、["a","b","ab","ba"].filter(/) のように使用できます。 ^a/ )、「a」で始まるすべての値を返します: ["a","ab"]。
実際、Array.prototype.filter は Firefox に実装されています。これは、exec の間接呼び出しがこのブラウザですでに機能しているためです。ただし、フィルターに RegExp.prototype.call メソッドが追加されていない場合、ブラウザーをまたいで実行することはできません。