Specyfikacja (http://www.ecma-international.org/ecma-262/7.0/index.html#sec-function.prototype.tostring) nie określa dokładnego ciągu znaków zwracanego dla wbudowanego functi na:
19.2.3.5 Function.prototype.toString
Gdy metoda toString nazywany jest na func obiektu, następujące kroki podejmowane są:
Jeśli func jest oprawionego Funkcja egzotyczny przedmiot , następnie Zwróć implementację zależną od implementacji Przedstawienie kodu źródłowego funkcji func. Reprezentacja musi być zgodna z poniższymi regułami. Jest zależne od implementacji, czy reprezentacja zawiera powiązaną informację o funkcji lub informacje o funkcji docelowej. Jeśli Typ (func) jest obiektem i jest wbudowanym obiektem funkcji lub ma wewnętrzne gniazdo [[ECMAScriptCode]], a następnie zwraca zależną od implementacji łańcuchową reprezentację kodu źródłowego func. Reprezentacja musi być zgodna z poniższymi regułami. Zgłoszenie wyjątku TypeError . toString reprezentacyjne Wymagania:
reprezentacja ciąg musi mieć składnię FunctionDeclaration, FunctionExpression, GeneratorDeclaration, GeneratorExpression, ClassDeclaration, ClassExpression, ArrowFunction, MethodDefinition lub GeneratorMethod zależności od rzeczywistych cech obiektu. Używanie i umieszczanie białych znaków, terminatorów linii i średników w ciągu znaków reprezentacji jest zależne od implementacji od .Jeśli obiekt został zdefiniowany przy użyciu kodu ECMAScript , a zwrócona reprezentacja łańcuchów nie ma formy MethodDefinition lub GeneratorMethod, wówczas reprezentacja musi być taka, że jeśli łańcuch jest oceniany, użycie eval w kontekście leksykalnym , który jest równoważny kontekst leksykalny użyty do stworzenia oryginalnego obiektu , spowoduje powstanie nowego funkcjonalnie równoważnego obiektu. W tym przypadku zwracany kod źródłowy nie może swobodnie wymieniać dowolnych zmiennych , które nie były swobodnie wymieniane przez kod źródłowy oryginalnej funkcji, , nawet jeśli te "dodatkowe" nazwy były pierwotnie w zakresie. Jeśli implementacja nie może wytworzyć łańcucha kodu źródłowego, który spełnia tych kryteriów, to musi zwrócić ciąg, dla którego eval wyrzuci wyjątek SyntaxError.
Sprawdzanie pod kątem [Native Code]
może, ale nie musi działać w zależności od tłumacza. Ponadto implementacja może również zaimplementować wbudowane funkcje jako normalny kod javascript.
Tak więc w odpowiedzi na twoje pytanie nie można ustalić, czy jest określony w JavaScript, czy wbudowana funkcja została poprawiona małpkowo.
To powiedziawszy, wygląda na to, że Chrome i Firefox zwracają ciąg znaków [Native Code]
pod warunkiem sprawdzenia innych implementacji, które mogą być rozwiązaniem pragmatycznym.
Może możesz uruchomić swój własny skrypt w WebWorker i porównać funkcję z wewnątrz funkcji do funkcji na stronie głównej. – Buzzy