2

関数aがあるとしましょう。その組み込み関数またはユーザーによって定義された関数かどうかを知りたいです。
a.toString() が含ま[native code]れているかどうかを確認しようとしましたが、部分文字列を持つユーザー定義関数[native code]は失敗します。これを行うより良い方法はありますか?

4

2 に答える 2

1

したがって、ここで確認するコードをいくつか示します。

var rgx = /\[native code\]\s*\}\s*$/;

function some(){
    '[native code]'
}

console.log(
    rgx.test(print.toString()),
    rgx.test(some.toString())
);
于 2013-10-26T18:09:16.960 に答える
1

おそらく素朴なアプローチの 1 つは、関数名がドキュメントのプロパティとして存在するかどうかをテストすることです。

function newFunction (){
    return true;
}

console.log('newFunction' in document, 'toString' in document);

もちろん、これは徹底的にテストされているわけではなく、関数が a の拡張として作成された場合は失敗しますprototype。たとえば、次のようになります。

function newFunction (){
    return true;
}

Object.prototype.newFunctionName = function () {
    return 10 * 2;
};

console.log('newFunction' in document, 'toString' in document, 'newFunctionName' in document); // false, true, true

JS フィドルのデモ

'eval' in document( を返すという点で)も失敗することを考えると、これは、オブジェクトのプロトタイプ メソッドを識別するためにのみ機能するfalse、または機能する可能性があります。これは、せいぜい不完全なソリューションです。

于 2013-10-26T17:30:20.520 に答える