Considerar:
function Shape() {
this.name = "Generic";
this.draw = function() {
return "Drawing " + this.name + " Shape";
};
}
function welcomeMessage()
{
var shape1 = new Shape();
//alert(shape1.draw());
alert(shape1.hasOwnProperty(name)); // This is returning false
}
.welcomeMessagellamado en el body.onloadevento.
Esperaba shape1.hasOwnProperty(name)devolver verdadero, pero está volviendo falso.
¿Cuál es el comportamiento correcto?
javascript
Thiyaneshwaran S
fuente
fuente

"name"diferencia denameRespuestas:
hasOwnPropertyes una función JavaScript normal que toma un argumento de cadena.Cuando llama,
shape1.hasOwnProperty(name)le está pasando el valor de lanamevariable (que no existe), tal como lo haría si escribieraalert(name).Es necesario llamar
hasOwnPropertycon una cadena que contienename, como este:shape1.hasOwnProperty("name").fuente
hasOwnPropertyespera el nombre de la propiedad como una cadena, por lo que seríashape1.hasOwnProperty("name")fuente
Prueba esto:
función welcomeMessage () { var shape1 = new Shape (); // alerta (shape1.draw ()); alert (shape1.hasOwnProperty ("nombre")); }Cuando se trabaja con la reflexión en JavaScript, los objetos miembro siempre se denominan como una cadena. Por ejemplo:
for(i in obj) { ... }El iterador de bucle contendrá un valor de cadena con el nombre de la propiedad. Para usar eso en el código, debe abordar la propiedad usando el operador de matriz de esta manera:
for (i in obj) { alert ("El valor de obj." + i + "=" + obj [i]); }fuente
hasOwnProperty () es una buena propiedad para validar claves de objetos. Ejemplo:
var obj = {a:1, b:2}; obj.hasOwnProperty('a') // truefuente