2012-05-15 12 views
6

Una cadena podría ser vista como el objeto más simple que puede contener y manipular texto, y como tal, las funciones que actúan sobre cadenas no necesariamente deben agruparse como métodos. Por otro lado, javascript es principalmente un lenguaje de programación web, y trabajar con URI es un uso bastante común para cadenas en el lenguaje; en este caso, algo como lastName.encodeURIComponent() sería bastante útil.¿Por qué son funciones como escape, unescape, etc., no métodos en el objeto String?

¿Por qué cosas como encodeURIComponent y unescape son funciones y no métodos en el objeto String? ¿Hay algún principio de CS en funcionamiento aquí, o fue una elección subjetiva de uno de los diseñadores del lenguaje?

Obviamente no todas las funciones que operan en una cadena deben estar en el objeto cadena, pero ¿dónde y cómo deciden las personas dónde dibujar la línea?

+0

es como preguntar por qué 'eval' también era un método global y no un método para cadenas. – Joseph

+0

Sí, es algo así como preguntar eso. Voy a enmendar la pregunta un poco. – Fuser97381

Respuesta

3

No creo que esos métodos sean parte de JavaScript sino que se hereden de window, que es el objeto global asociado con los navegadores. Por lo tanto, aunque las funciones que enumera se relacionan con cadenas, en realidad están estrechamente vinculadas a la función del navegador y, por lo tanto, no están adjuntas al prototipo String. Fuentes como MDN son algo turbias sobre esto, pero estoy bastante seguro de que las especificaciones JS originales no mencionan estos métodos.

Puede que no tenga mucho sentido, pero hoy en día es realmente concebible que alguien quiera usar JS como el lenguaje de un sistema integrado u otra cosa que no tenga una asociación de Internet. Aquí, una sintaxis que incluye encodeURIComponent() estaría tan fuera de lugar como document.getElementById().

7

Porque son específicos del entorno del navegador. No tienen un lugar en el objeto String genérico para el lenguaje JavaScript.

1

¿Dónde se detendría? Las cadenas son poco fiables, por la definición que está utilizando cualquier método que tomara una cadena como argumento o que volviera debería estar en la clase de cadena.

Del mismo modo, sería razonable tener métodos de codificación que tomaran secuencias y métodos de transmisión que codificaran.

Estaría por todo el lugar rápido, o estaría extendiendo cadena delegando en una clase de codificación.

1

La función escape() codifica una cadena.

Esta función M * copos una cadena portátiles *, por lo que puede ser transmiten a través de cualquier red a cualquier ordenador compatible con caracteres ASCII.

Esta función codifica caracteres especiales

Ahora bien, esta funcionalidad es algo que es específico para cadenas que son las direcciones URL en el entorno basado en navegador, JS como lengua es independiente de ella.

Así que poner escape, unescape también en String será inútil en escenarios no relacionados con red/URL.

es por eso que son parte del objeto ventana.

Lo quiere en cadena, puede agregarlo al prototipo de String.

Cuestiones relacionadas