ホームページ  >  記事  >  バックエンド開発  >  code_PHP チュートリアルを使用して js で通常の関数を呼び出す方法

code_PHP チュートリアルを使用して js で通常の関数を呼び出す方法

WBOY
WBOYオリジナル
2016-07-21 15:51:43795ブラウズ

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 if (i in this && func.call( context, this[i], i, this))
results.push(this[i]);
results. {
// 配列内の各要素が指定されたテスト関数を満たす場合は true を返します。
Array.prototype.every = function (func, context) {
for (var i = 0; i if (i in this && !func.call(context, this[i]) 、i、this))
グループ内の少なくとも 1 つの要素が、提供されたテスト関数を満たします。
Array.prototype.some = function (func, context) {
for (var i = 0; i if (i in this && func.call(context, this[i], i, this))
return true; の各要素は、指定された関数の戻り値を呼び出します。
Array.prototype.map = function (func, context) {
var results = [];
for (var i = 0; i if (i in this)
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 メソッドが追加されていない場合、ブラウザーをまたいで実行することはできません。

http://www.bkjia.com/PHPjc/319058.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/319058.html技術記事 ECMAScript4 はかつて、この機能が ES4 仕様に追加されることを提案しましたが、後の ES4 ディスカッションメーリングリストの議論の中で、この提案は廃止される可能性があります。 ただし、次を追加することでこれを行うことができます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。