hasOwnProperty en JavaScript

79

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?

Thiyaneshwaran S
fuente
5
requiere una cadena, a "name"diferencia dename
AO_

Respuestas:

157

hasOwnProperty es una función JavaScript normal que toma un argumento de cadena.

Cuando llama, shape1.hasOwnProperty(name)le está pasando el valor de la namevariable (que no existe), tal como lo haría si escribiera alert(name).

Es necesario llamar hasOwnPropertycon una cadena que contiene name, como este: shape1.hasOwnProperty("name").

SLaks
fuente
1
No olvide agregar hasOwnProperty () devuelve un valor booleano que indica que la propiedad (en este caso el nombre) especificada existe o no
maheshmnj
18

hasOwnProperty espera el nombre de la propiedad como una cadena, por lo que sería shape1.hasOwnProperty("name")

Pablo Cabrera
fuente
3

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]);
 }
Ernelli
fuente
2

hasOwnProperty () es una buena propiedad para validar claves de objetos. Ejemplo:

var obj = {a:1, b:2};

obj.hasOwnProperty('a') // true
KARTHIKEYAN.A
fuente
Re "propiedad agradable" : ¿No es una función?
Peter Mortensen