recorrer objetos objeto metodos lista eliminar elemento convertir buscar array agregar javascript oop

objetos - ¿Cómo es casi todo en Javascript un objeto?



metodos en javascript (4)

Lo leí mucho en muchas introducciones de JavaScript. Simplemente no lo entiendo. Siempre pienso en los objetos como algo con métodos y propiedades. Arrays que entiendo, ya que tiene un par de valores clave. ¿Qué tal "Cuerdas" o "Números" o "funciones"? Estas cosas mencionadas arriba parecen ser como funciones para mí. Esto significa que ingresas algo, obtienes algo. Realmente no obtienes las propiedades de acceso ni nada. No se usa la notación de puntos en las matrices ni en esta lista de "objetos".

¿Alguien codifica algunos ejemplos de cada uno de estos con notación de puntos a los que se accede a sus métodos y propiedades? Sospecho que la definición de objeto probablemente sea limitada ya que comencé a aprender sobre JavaScript ...


Así es, en javascript, casi todo es un objeto. Pero estos objetos son un poco diferentes de lo que vemos en Java, C ++ u otros lenguajes convencionales. Un objeto en JS es simplemente un hashmap con pares clave-valor. Una clave es siempre una cadena, y un valor puede ser cualquier cosa incluyendo cadenas, enteros, booleanos, funciones, otros objetos, etc. Así puedo crear un nuevo objeto como este:

var obj = {}; // this is not the only way to create an object in JS

y agregue nuevos pares clave-valor en él:

obj[''message''] = ''Hello''; // you can always attach new properties to an object externally

o

obj.message = ''Hello'';

Del mismo modo, si deseo agregar una nueva función a este objeto:

obj[''showMessage''] = function(){ alert(this[''message'']); }

o

obj.showMessage = function() { alert(this.message); }

Ahora, cada vez que llamo a esta función, se mostrará una ventana emergente con un mensaje:

obj.showMessage();

Las matrices son simplemente aquellos objetos que son capaces de contener listas de valores:

var arr = [32, 33, 34, 35]; // one way of creating arrays in JS

Aunque siempre puede usar cualquier objeto para almacenar valores, pero las matrices le permiten almacenarlos sin asociar una clave con cada uno de ellos. Para que pueda acceder a un elemento usando su índice:

alert(arr[1]); // this would show 33

Un objeto de matriz, al igual que cualquier otro objeto en JS, tiene sus propiedades, tales como:

alert(arr.length); // this would show 4

Para mayor detalle, recomendaría altamente las Técnicas Pro Javascript de John Resig.


La frase "En JavaScript, CASI todo es un objeto" es correcta, porque las unidades de código PRINCIPAL (objetos, funciones, matrices) son objetos de JavaScript.
El código JavaScript usa 9 unidades diferentes más 1 (múltiple):
- 01. array
- 02. booleano
- 03. función
- 04. nulo
- 05. número
- 06. objeto
- 07. regexp
- 08. cadena
- 09. undefined
- 10. múltiple

PERO objetos de JavaScript:
- NO son las mismas criaturas que los "objetos" en otros lenguajes orientados a objetos.
- son una colección de pares de nombre-valor.
- Todos tienen una función de creación (su constructor).
- todos INHEREN los miembros del prototipo-objeto de su constructor y este es su prototipo.
- todas las funciones son objetos PERO NO todos los objetos son funciones .
- Las funciones tienen alcance, objetos NO (un error de diseño en mi opinión).
- Objeto, Función, Array, String, ... con el primer CAPITAL son funciones !!!
- es más importante las diferencias de objetos y funciones JS, que sus puntos comunes.
- el nombre ''instancia'' en JS tiene un significado diferente con el nombre ''instancia'' en la teoría del conocimiento donde una instancia hereda los atributos de su concepto genérico. En JS solo denota su constructor. JavaScript tiene el nombre ''instancia'' de ''clase-based-inheritance'' ool (java) donde es un nombre apropiado porque esos objetos heredan los atributos de las clases.
Un mejor nombre para la palabra clave JS ''instanceof'' es ''objectof''.

Las funciones JS SON objetos JS porque:
1) pueden tener miembros como objetos JS:

> function f(){} undefined > f.s = "a string" "a string" > f.s "a string"

2) tienen una función constructora, como todos los objetos JS, la función Función:

> (function f(){}) instanceof Function true

3) como todos los objetos JS, su prototipo-objeto es el mismo con su prototipo de constructor:

> (function f(){}).__proto__ === Function.prototype true > ({}).__proto__ === Object.prototype true > (new Object).__proto__ === Object.prototype true

4) por supuesto, las funciones JS como objetos JS ESPECÍFICOS tienen atributos adicionales, como todas las funciones en lenguajes de programación, que los objetos JS no tienen como puede llamarlos (ejecutarlos) con información de entrada y salida.

TODO NO es un objeto, porque, por ejemplo, NO podemos agregar miembros a una cadena literal:

> var s = "string" undefined > s.s2 = "s2string" "s2string" > s.s2 undefined


No todo es un objeto en javaScript. JavaScript tiene primitivos y objetos. Hay seis primitivos: nulo, indefinido, cadena, número, booleano y símbolo. Puede parecer que todo está actuando como un objeto debido a las propiedades y funciones a las que se puede acceder. Por ejemplo,

var stringvar="this string"; typeof stringvar; // "string" stringvar.length; //11

ahora dado que "stringvar" es un tipo de cadena, que es un tipo primitivo, no debería poder acceder a la longitud de la propiedad. Puede hacerlo debido a algo llamado Boxing.Boxing es el proceso donde cualquier tipo primitivo se convierte a un tipo de Objeto y el reverso se llama Unboxing. Estos tipos de objetos o contenedores de objetos se crean con la vista de que hay algunas operaciones comunes que uno podría necesitar realizar con los valores primitivos. Contienen métodos y propiedades útiles y son prototipos vinculados a las primitivas. En lo que respecta a los Objetos, pares de valores clave se pueden agregar a cada objeto, incluso a las matrices.

var arr=[1,2,3]; arr.name="my array"; arr; //[1,2,3,name:''my array'']

esto no quiere decir que el cuarto elemento de la matriz es "nombre: ''mi matriz''". "nombre" es una propiedad que se puede llamar con notación de puntos (arr.name) o paréntesis (arr ["nombre"]) .


No, no todo es un objeto en JavaScript. Muchas cosas con las que interactúas regularmente (cadenas, números, booleanos) son primitivas, no objetos. A diferencia de los objetos, los valores primitivos son inmutables. La situación se complica por el hecho de que estas primitivas tienen envoltorios de objetos ( String , Number y Boolean ); estos objetos tienen métodos y propiedades, mientras que las primitivas no, pero las primitivas parecen tener métodos porque JavaScript crea silenciosamente un objeto contenedor cuando el código intenta acceder a cualquier propiedad de una primitiva.

Por ejemplo, considere el siguiente código:

var s = "foo"; var sub = s.substring(1, 2); // sub is now the string "o"

Detrás de las escenas, s.substring(1, 2) comporta como si estuviera realizando los siguientes pasos (aproximados):

  1. Cree un objeto String wrapper a partir de s , equivalente a usar new String(s)
  2. Llame al método substring() con los parámetros apropiados en el objeto String devuelto por el paso 1
  3. Eliminar el objeto String
  4. Devuelve la cadena (primitiva) del paso 2.

Una consecuencia de esto es que si bien parece que puede asignar propiedades a primitivos, no tiene sentido porque no puede recuperarlos:

var s = "foo"; s.bar = "cheese"; alert(s.bar); // undefined

Esto sucede porque la propiedad se define efectivamente en un objeto String que se descarta inmediatamente.

Los números y booleanos también se comportan de esta manera. Las funciones, sin embargo, son objetos completamente desarrollados y heredan de Object (en realidad Object.prototype , pero ese es otro tema). Por lo tanto, las funciones pueden hacer cualquier cosa que los objetos puedan, incluso tener propiedades:

function foo() {} foo.bar = "tea"; alert(foo.bar); // tea