2012-05-15 24 views
6

Một chuỗi có thể được xem là đối tượng đơn giản nhất có thể giữ và thao tác văn bản, và vì các hàm như vậy hoạt động trên các chuỗi không nhất thiết phải được gộp thành các phương thức. Mặt khác, javascript chủ yếu là một ngôn ngữ lập trình web và làm việc với URI là một cách sử dụng phổ biến cho các chuỗi trong ngôn ngữ; trong trường hợp này một cái gì đó như lastName.encodeURIComponent() thực sự sẽ khá hữu ích.Tại sao các chức năng như thoát, unescape, vv, không phải là các phương thức trên đối tượng String?

Tại sao những thứ như encodeURIComponent và unescape là các hàm và không phải là các phương thức trên đối tượng String? Có một số nguyên tắc CS tại nơi làm việc ở đây, hay nó là một sự lựa chọn chủ quan của một trong những nhà thiết kế ngôn ngữ?

Rõ ràng không phải mọi chức năng hoạt động trên một chuỗi phải nằm trong đối tượng chuỗi, nhưng ở đâu và làm thế nào để mọi người quyết định nơi để vẽ đường?

+0

nó giống như hỏi tại sao 'eval' cũng là một phương thức toàn cầu và không phải là một chuỗi. – Joseph

+0

Vâng, nó có phần giống như yêu cầu điều đó. Tôi sẽ sửa đổi câu hỏi một chút. – Fuser97381

Trả lời

3

Tôi không nghĩ rằng các phương pháp đó là một phần của JavaScript nhưng được kế thừa từ window, là đối tượng chung được liên kết với trình duyệt. Do đó, trong khi các hàm mà bạn liệt kê xử lý các chuỗi, chúng thực sự bị ràng buộc chặt chẽ với chức năng trình duyệt và do đó không được gắn vào nguyên mẫu String. Các nguồn như MDN là loại âm u, nhưng tôi khá chắc chắn rằng đặc tả JS ban đầu không đề cập đến những phương thức này.

Nó có thể không có ý nghĩa nhiều, nhưng ngày nay nó thực sự là conceivable rằng ai đó có thể muốn sử dụng JS như ngôn ngữ của một hệ thống nhúng hoặc cái gì khác mà không có hiệp hội Internet. Ở đây, cú pháp bao gồm encodeURIComponent() sẽ không đúng chỗ như document.getElementById().

7

Vì chúng đặc trưng cho môi trường trình duyệt. Chúng không có một vị trí trong đối tượng String chung cho ngôn ngữ JavaScript.

1

Bạn sẽ dừng ở đâu. Các chuỗi là không có giá trị, bởi định nghĩa bạn đang sử dụng bất kỳ phương thức nào lấy một chuỗi làm đối số hoặc được trả về phải nằm trong lớp chuỗi.

Tương tự, việc sử dụng các phương pháp mã hóa đã thực hiện các phương pháp mã hóa và luồng đã mã hóa một cách hợp lý.

Bạn sẽ nhanh chóng ở khắp mọi nơi hoặc bạn muốn mở rộng chuỗi bằng cách ủy quyền cho lớp Mã hóa.

1

Hàm escape() mã hóa một chuỗi.

Chức năng này m * akes một chuỗi di *, vì vậy nó có thể được truyền qua bất kỳ mạng đến bất kỳ máy tính có hỗ trợ các ký tự ASCII.

Chức năng này mã hóa ký tự đặc biệt

Bây giờ chức năng này là một cái gì đó mà là cụ thể cho Strings là các URL trong môi trường trình duyệt dựa, JS như một ngôn ngữ độc lập với nó.

Vì vậy, đặt thoát, unescape cũng thành Chuỗi sẽ trở thành vô ích trong các trường hợp không liên quan đến mạng/URL.

đó là lý do tại sao chúng là một phần của đối tượng Cửa sổ.

Bạn muốn nó trong chuỗi, bạn có thể thêm nó vào nguyên mẫu của chuỗi.

Các vấn đề liên quan