Objeto: propiedad local

La propiedad Object.hasOwnProperty(prop) es un método heredado por todos los objetos descendientes de Object que permite saber si el objeto propietario tiene una cierta propiedad o método definida en el mismo.

Si se intenta comprobar una propiedad que no existe como propiedad local del obejto, o está vacía o es heredada el resultado es false.

Es decir, el resultado es true solo si la propiedad está definida en el propio objeto, incluso si el valor es null o undefined.

Este método es interesante para no repetir o sobreescribir propiedades. Antes de asignar una propiedad a un objeto podemos comprobar si esa propiedad ya existe y ahorrarnos errores que luego son difíciles de detectar.

Forma = function(a,b){this.alto=a; this.ancho = b};

Forma.prototype.area=function(){return this.alto*this.ancho} ;

cuadro = new Forma(4,5);

console.log(cuadro.area() );

console.log(cuadro.hasOwnProperty('area'));   //false

console.log(cuadro.hasOwnProperty('alto'));   //true

La instancia cuadro posee como propiedad local alto y ancho ( se han copiado y sobreescrito), pero no posee el método area. Sin embargo puede usarlo, pues es una función heredada por prototype.

Veamos ahora otro ejemplo similar pero sin usar prottotype (sin herencia)

Forma = function(a,b){

    this.alto=a;

    this.ancho = b;

    this.area=function(){return this.alto*this.ancho}

} ;

cuadro = new Forma(4,5);

console.log(cuadro.area() );

console.log(cuadro.hasOwnProperty('area'));   //true

console.log(cuadro.hasOwnProperty('alto'));   //true

En este caso ambas comprobaciones dan como resultado true, pues el objeto se ha creado copiando las propiedades y métodos del constructor. Las propiedades se han sobreescrito (igual que en el ejemplo anterior) y el método se ha copiado con lo que este objeto cuadro si posee el método area como método local.