¿Qué son los objetos expando en javascripts?Javascript expando objects
¿Para qué necesitamos esto? Cualquier ejemplo completo será apreciado
He encontrado 1 artículo aquí Javascript: The red-headed stepchild of web development
¿Qué son los objetos expando en javascripts?Javascript expando objects
¿Para qué necesitamos esto? Cualquier ejemplo completo será apreciado
He encontrado 1 artículo aquí Javascript: The red-headed stepchild of web development
Bueno, en javascript, cualquier objeto es un objeto expando. Lo que significa es, como el artículo cubre, que cada vez que intente acceder a una propiedad se creará automáticamente.
var myObj = {}; // completely empty object
myObj.myProp = 'value';
el momento en que se asigna un valor myProp
, la propiedad myProp
se crea de forma dinámica, apesar de que no existía antes. En muchos otros lenguajes, como C#, esto normalmente no es posible (de hecho, C# acaba de habilitar el soporte de objetos expandidos también, pero eso es además del punto). Para acceder a una propiedad en una clase normal en C#, debe especificar en la clase que sí tiene esta propiedad.
No del todo correcto. Ver el comentario de npup a continuación para aclaración.
Un artículo escrito en 2007 que utiliza document.all (como el única manera de acceder a los elementos)? Esa es una gran bandera roja.
Es solo disfrazarse "Puede agregar propiedades a un objeto" con algunas palabras de moda.
Necesitamos poder hacer esto porque de lo contrario no podríamos almacenar datos, y eso haría que JavaScript fuera un lenguaje bastante inútil.
(todo es una matriz? No, no lo es. Y se itera sobre un objeto sin un envoltorio hasOwnProperty. Eso no es seguro. Hemos de tener lejos del artículo, es peor que inútil)
Sí, ese artículo fue un verdadero desastre. Ay. – npup
Todo, excepto los tipos primitivos (cadena, número, booleano) son objetos y admiten la estructura Clave: valores. las propiedades (claves) se pueden acceder y establecer usando la notación de punto así como los corchetes.
var myObj = {};
myObj.myProp1 = 'value1'; //works, an expando property
myObj[myProp2] = 'value2'; // doesn't work, myProp2 is an undefined name.
myObj['myProp2'] = 'value2'; // works , an expando property
myObj[2010]= 'value'; //note the key is number, still works, an expando property??
myObj.2010 = 'value'; // FAILS. to use dot notation, key must be a string
Incluso los tipos primitivos se envuelven automáticamente en Objetos cuando es necesario. 'var i = número nuevo (3); i.someProperty = "someValue"; console.log (i.someProperty); ' – igor
@igor:" Automáticamente "es la palabra incorrecta, y un poco engañosa. Envolvió explícitamente 'i' en un objeto Number, que le permite usar propiedades de expansión. En consecuencia, esto no funcionará: 'var i = 3; i.someProperty = "someValue"; console.log (i.someProperty); ' – theazureshadow
ah ... lo siento ... tienes razón. El operador 'nuevo' hace su trabajo. Lo siguiente no funciona tan bien: var i = Number (3); i.someProperty = "someValue"; console.log (i.someProperty); – igor
JavaScript convierte elementos con ID específicos de nombres en expandos del objeto DOM devuelto. Se explica here.
No .. si simplemente "intenta acceder" a una propiedad, por supuesto, no se "creará automáticamente". Puedes empujar una propiedad cuando quieras, pero eso no es lo mismo. Solo llegar a la 'foo.bar' que no existe y recuperar' undefined' no hace que 'foo' * tenga * la propiedad' bar'. – npup
Por lo tanto, para resumir: la capacidad de expansión está en * write *, no access. Los objetos Javascript le permiten escribir una nueva propiedad a un objeto sin tener que predefinir esa propiedad, como se requiere en algunos otros idiomas. – XML