Cita de: MinusFour en 14 Febrero 2020, 18:40 PMExacto, estoy usando películas como propiedad de window y contaminando/polucionando el scope global. Tu dices que con mi respuesta la lio o le añado complejidad a algo sencillo, y tu te pones a hablar de scopes, closures y contaminación global, aclárate.Código (javascript) [Seleccionar]
["Peliculas"+i]["titulo"]
Lo único que hace esto es crear un arreglo con un string "Peliculas1". No hace referencia a la variable "Peliculas1". Tendrías que usar el objeto global (y solo sí, la variable fue creado en el entorno global) para poder acceder a la variable de manera programática.Código (javascript) [Seleccionar]
window["Peliculas"+i]["titulo"]
Pero no hagas esto y mejor usa las estructuras apropiadas de tal manera que puedas hacer uso de todas las herramientas asociadas a esas estructuras y ni decir que ya no estás contaminando el entorno global.
No se de donde salio esto, pero el usuario igual puede agregar propiedades no enumerables.
[[Call]] no es una propiedad, por lo tanto no tiene nada que ver con que sea enumerable o no. Mejor olvidarse de [[Call]] por ahora, porque no es algo que un principiante como el OP necesita saber.
No se, pero yo creo que el OP tenía una duda y ahora va a tener miles. No entiendo porque complicar un problema que es tan sencillo.
No quise entrar en más porque personalmente no suelo usar librerías externas y por lo tanto nunca tengo colisiones y por no alargar mi ya largo mensaje. Puede buscar sobre Immediately Invoked Function Expression (IIFE) para crear variables "locales".
Yo recomiendo usar module pattern.
IIFE, Closures y Módulos explicados
A cerca de call
No lo has leído todo porque dije que se pueden añadir propiedades no enumerables. Hacerlas enumerables no enumerables, etc.
He dicho que call es un método de una función. Qué es incorrecto?
Te cito de la página oficial de ecmascript https://www.ecma-international.org/ecma-262/5.1/
CitarThe function's Call internal method ( 8.6.2) is called with an empty arguments...Claramente dice el "método" interno call de la función. Es exactamente lo que dije yo.
Y call sí es una propiedad/metodo no enumerable de una función. Puedes comprobarlo:
Código (javascript) [Seleccionar]
<html>
<body>
<script>
function ObtenerPropiedades( obj ) {
var props = [];
do {
Object.getOwnPropertyNames( obj ).forEach(function ( prop ) {
if ( props.indexOf( prop ) === -1 ) {
props.push( prop );
}
});
}
while ( obj = Object.getPrototypeOf( obj ) );
return props;
}
function ejemplo(){};
var referencia = eval(ejemplo);
alert(ObtenerPropiedades(referencia));
</script>
</body>
</html>