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.