W jakich silnikach JavaScript funkcja Function.prototype.toString nie zwraca kodu źródłowego tej funkcji?

EDYCJA: Aby być wyraźnym, nie szukam porad ani opinii na temat jakościowej wartości różnych kwestii wynikających z omawianej funkcjonalności - nie szukam też niezawodnego rozwiązania praktycznego problemu; Po prostu szukam technicznych, sprawdzalnych odpowiedzi na pytanie w tytule. Dodałem pytanie do listy niezgodnych przeglądarek.

Korzystanie z funkcji.toString metoda będzie zazwyczajrenderuj kod źródłowy tej funkcji. Problem polega na tym, że to zachowanienie jest określony - specyfikacja nie zobowiązuje się do tego, jakie zachowanie powinno być stosowane do funkcji. Konsola Chrome nawet ci powie (kiedy przekażesz coś innego niż funkcjęFunction.toString.call), toFunction.prototype.toString nie jest ogólny

Ten wpis na blogu sugeruje, że można to wykorzystać jako metodę tworzenia czytelnej składni dla łańcuchów wielowierszowych (poprzez przechowywanie ciągu jako komentarza wielowierszowego w treścifunkcja no-op). Autor sugeruje to użycie w kontekście pisaniaNode.js aplikacje z klauzulą, że to zachowanie jest wiarygodne tylko dlatego, że Node.js działa w kontrolowanym środowisku. Ale w rodzimej sieci JavaScript wszystko może się pojawić i zinterpretować, a nie powinniśmy polegać na nieokreślonym zachowaniu.

W praktyce jednakUstawiłem skrzypce co powoduje, że zaznaczone pole, którego zawartość jest określana przez duży ciąg wielowierszowy, aby przetestować kod, oraz każda przeglądarka na mojej stacji roboczej (Chrome 27, Firefox 21, Opera 12, Safari 5, Internet Explorer 8) wykonuje się zgodnie z przeznaczeniem.

Jakie są obecne silniki Javascriptnie zachowywać się w następujący sposób?

Jeśli się uwzględni:

function uncomment(fn){
  return fn.toString().split(/\/\*\n|\n\*\//g).slice(1,-1).join();
}

Następujące:

uncomment(function(){/*
erg
arg
*/});

Powinien wysyłać:

erg
arg
Lista niezgodnych przeglądarek:Firefox 16…

questionAnswers(2)

yourAnswerToTheQuestion