Autor Tema: JavaScript Uncaught TypeError: Cannot assign to read only property CU01189E#  (Leído 2331 veces)

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Buenas.

Citar
EJERCICIO 1
Dado este fragmento de código. Revísalo y responde a las siguientes preguntas:

var persona1 = {};
Object.defineProperty(persona1, "edad", { value: 42, writable: false });
persona1.edad = 19;
 
a) Explica paso a paso el significado de este código (busca información en internet si te es preciso).
b) Crea un pequeño script donde se ejecute este código y se muestre un mensaje por pantalla informando del valor de la edad. Activa la consola para comprobar si aparece algún error.
c) Crea el mismo script pero usando strict mode. Activa la consola y comprueba si aparece algún error. ¿Qué diferencias observas entre la ejecución con strict mode y sin strict mode? ¿Qué explicación le darías a estas diferencias? ¿Crees que sería positivo que este código se escribiera en strict mode o no? ¿Por qué?

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<title>Ejemplo aprenderaprogramar.com CU01189E</title><meta charset="utf-8">
<script type="text/javascript">
function testEjercicio1(){
'use strict';
var persona1 = {};
Object.defineProperty(persona1, 'edad',{value:42, writable:false});
persona1.edad = 19;
alert(persona1.edad);
}
</script>
</head>
<body>
<div id="cabecera"><h2>Cursos aprenderaprogramar.com</h2><h3>Ejemplos JavaScript</h3></div>
<div style="color:blue;" id ="pulsador" onclick="testEjercicio1()">Pulse aquí.</div>
</body>
</html>


a)Se crea un objeto persona1, vacío. Se le añade la propiedad edad con valor 42 al objeto persona1. Y se establece que no se podrá editar el valor de dicha propiedad, mediante writable:false. La última linea intenta dar un nuevo valor a la propiedad edad del objeto persona1.

b)No dá ningún error.

c)Aparece el siguiente error: "TypeError: "edad" is read-only", y en otro navegador: Uncaught TypeError: Cannot assign to read only property 'edad' of object '#<Object>'". Que vienen a decir que no se puede cambiar el valor de una propiedad que es de solo lectura. En este caso la única diferencia es que con strict mode da error la linea "persona1.edad = 19;". Creo que si sería positivo, porque nos evitaríamos usar código innecesario.

Citar
EJERCICIO 2
Crea y ejecuta un script que use with y que esté:
a) En modo normal. ¿Cuál es el código y cuál es el resultado que obtienes?
b) En strict mode. ¿Cuál es el código y cuál es el resultado que obtienes?


Código: [Seleccionar]
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">
<script type="text/javascript">
function testEjercicio2(){
'use strict';
with(document.body.style){
backgroundColor = 'black';
}
}
</script>
</head>
<body>
<div id="cabecera"><h2>Cursos aprenderaprogramar.com</h2><h3>Ejemplos JavaScript</h3></div>
<div style="color:blue;" id ="pulsador" onclick="testEjercicio2()">Pulse aquí.</div>
</body>
</html>


a)Que se ejecuta el código y cambia el color de fondo.

b)Que no se ejecuta el código porque da un error. "SyntaxError: strict mode code may not contain 'with' statements"

Saludos.
« Última modificación: 18 de Febrero 2016, 08:29 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola! Todas las respuestas bien.

En el ejercicio 1 punto c), sobre si es positivo o no el uso de strict mode en principio creo que cabe decir que sí por introducir mayor seguridad y confiabilidad en el código. El problema que se presenta es la falta de unificacación de criterios entre los navegadores, y entre la comunidad de programadores. Esto lleva a que al final, en la práctica, no se utilice o se utilice menos de lo que sería deseable.

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".