2012-05-15 12 views
6

Ciąg może być postrzegany jako najprostszy obiekt, który może pomieścić i manipulować tekstem i jako takie funkcje, które działają na łańcuchach, nie powinny być traktowane jako metody. Z drugiej strony javascript jest przede wszystkim językiem programowania sieciowego, a praca z identyfikatorami URI jest dość powszechnym użyciem dla napisów w języku; w tym przypadku coś takiego jak lastName.encodeURIComponent() byłoby całkiem przydatne.Dlaczego funkcje takie jak escape, unescape, itp., A nie metody w obiekcie String?

Dlaczego rzeczy takie jak encodeURIComponent i unescape są funkcjami, a nie metodami w obiekcie String? Czy istnieje tutaj jakaś zasada CS, czy też był to subiektywny wybór jednego z twórców języka?

Oczywiście nie każda funkcja działająca na łańcuchu musi znajdować się w obiekcie napisów, ale gdzie i jak ludzie decydują, gdzie narysować linię?

+0

to pytanie, dlaczego 'eval' jest również globalną, a nie metodą dla łańcuchów. – Joseph

+0

Tak, to trochę tak, jakbyśmy o to prosili. Trochę poprawię pytanie. – Fuser97381

Odpowiedz

3

Nie sądzę, że te metody są częścią JavaScript, ale są dziedziczone po window, który jest globalnym obiektem powiązanym z przeglądarkami. Tak więc, podczas gdy wymienione funkcje dotyczą łańcuchów, w rzeczywistości są ściśle związane z funkcją przeglądarki i dlatego nie są dołączone do prototypu String. Źródła takie jak MDN są trochę mętne, ale jestem pewien, że oryginalna specyfikacja JS nie wspomina o tych metodach.

Być może nie miało to większego sensu, ale obecnie można sobie wyobrazić, że ktoś może chcieć używać JS jako języka wbudowanego systemu lub czegoś, co nie ma związku z Internetem. Tutaj składnia, która zawierałaby encodeURIComponent() byłaby nie na miejscu jako document.getElementById().

7

Ponieważ są one specyficzne dla środowiska przeglądarki. Nie mają miejsca w ogólnym obiekcie String dla języka JavaScript.

1

Gdzie byś się zatrzymał. Łańcuchy są niepoprawne, z definicji używa się dowolnej metody, która pobierała ciąg jako argument lub zwracana na powinna być w klasie łańcuchowej.

Równie sensownym byłoby posiadanie metod kodowania, które pobierały strumienie i strumieniowe metody kodowania.

Będziesz szybko znajdować się w tym miejscu, lub będziesz przedłużać ciąg przez delegowanie do klasy Kodowania.

1

Funkcja escape() koduje ciąg znaków.

Funkcja ta m * AKES ciąg przenośne *, dzięki czemu może być transmitowane w dowolnej sieci na dowolnym komputerze, który obsługuje znaków ASCII.

Ta funkcja koduje znaki specjalne

Teraz ta funkcjonalność jest czymś, co jest specyficzne dla pszczół, które są adresy URL w środowisku przeglądarki oparte JS jako język jest niezależne od niego.

Użycie escape, unescape również w String stanie się bezużyteczne w scenariuszach niezwiązanych z siecią/URL.

to dlatego są one część obiektu Window.

Potrzebujesz go w łańcuchu, możesz dodać go do prototypu Stringa.

Powiązane problemy