Вы можете вызвать унаследованную функцию .toString()
в методах и проверить результат. Нативные методы будут иметь блок типа [native code]
.
if( this[p].toString().indexOf('[native code]') > -1 ) {
// yep, native in the browser
}
Обновление, потому что многие комментаторы хотят получить разъяснения, и у людей действительно есть требование для такого обнаружения. Чтобы эта проверка действительно сохранилась, нам, вероятно, следует использовать строку строки:
if( /\{\s+\[native code\]/.test( Function.prototype.toString.call( this[ p ] ) ) ) {
// yep, native
}
Теперь мы используем метод .toString
из prototype
из Function
, что делает его очень маловероятным, если не невозможным, каким-то другим сценарием, перезаписавшим метод toString
. Во-вторых, мы проверяем регулярное выражение, поэтому мы не можем быть одураченными комментариями внутри тела функции.