6

これは非常に奇妙で、なぜそれが起こるのか分かりませんが、ここにあります。私がこれをするとき:

/^\d+$/.test('16')

それはうまくいきます。しかし、次のようなことをすると、エラーが発生します

var t = /^\d+$/.test;
t('16');

私が得るエラーはこれです:

TypeError:互換性のないレシーバーで呼び出されたメソッドRegExp.prototype.test[オブジェクトウィンドウ]

ここのウィンドウと何の関係があるのか​​わかりません。

4

3 に答える 3

9

その場合、正規表現をオブジェクトとして (つまり、オブジェクトのメソッド呼び出しとして)関数を/^\d+$/.test('16')呼び出しています。testthis

実行時にt(16)オブジェクトが指定されていないため、thisデフォルトで最上位のオブジェクトであるwindow.

最初の動作を再現するには、次のようにする必要があります。

var r = /^\d+$/;
var t = r.test;
t.call(r, 16);
于 2012-09-21T18:38:00.807 に答える