3

この質問のコンテキストは次のとおりです。jQuery の推奨されるデザイン パターンを使用して jQuery プラグインを作成しました。このパターンでは、プラグインの最初のパラメーターとして文字列を渡して、目的の (事前定義された) メソッドを呼び出します。あなたのプラグインメソッド。そのような:

$("selector").php('method_name');

ただし、私の特定のプラグイン (単純な AJAX ハンドラーを介して PHP 関数を呼び出すだけ) では、ユーザーが特定のバックエンド PHP 関数を次のように呼び出すことができるようにしたいと考えています。

$("selector").php.strlen(param); // As an example of calling the PHP strlen function

.strlen は、.php オブジェクト (またはその他のオブジェクト) の定義済みメソッドではありません。つまり、JavaScript が例外をスローするのを防ぎ、ユーザーが呼び出しようとしている目的のメソッド名をキャッチする方法はありますか? そのメソッドが実際には定義されておらず、存在しない場合でも、

明らかな理由から、すべての PHP 関数にメソッド名 (またはインターフェース) を定義するつもりはありません。コードのオーバーヘッドが大きくなり、非常に時間がかかります。

4

2 に答える 2

3

ECMAScript Harmony は、プロパティ アクセスをインターセプトできるプロキシをサポートしています。残念ながら、まだ広くサポートされていません (Firefox 18 でサポートされています)。

var php = new Proxy({}, {
    get: function (target, name) {
        return function () {
            var args = Array.prototype.slice.call(arguments);
            alert('Here you would call ' + name + '(' + args.join(', ') + ')');
        };
    }
});

php.strlen('hello');

と呼ばれるものがありましたが__noSuchMethod__、これも広くサポートされているようには見えません。

于 2012-12-23T23:04:14.440 に答える
0

try catch ブロックでラップできます。

try {
   $("selector").php.strlen(param);
} catch(err) {
   // do sth
}
于 2012-12-23T22:57:57.263 に答える