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?


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").


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")


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

2

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

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

obj.hasOwnProperty('a') // true

Re "propiedad agradable" : ¿No es una función?
Peter Mortensen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.