lo primero es que me extraña que te funcione al menos una. los objetos literales tienen una sintaxis particular donde cada propiedad/valor es separada por una coma. en tu código, veo que seguido de la última propiedad/valor le sigue una coma. dicha coma esta de más y creo que todos los interpretes generan error. aparte de eso, no veo por donde puede estar el error, no veo nada más extraño. sobre la pregunta de hasOwnProperty tendras que explicarte. puedes usar el método cuantas veces quieras en un mismo objeto pero no lo puedes anidar porque lo devuelto por el método es un boolean. es decir...
Código:
// si puedes hacer lo siguiente;
object.hasOwnProperty('prop');
object.hasOwnProperty('prop');
...
// lo siguiente, tecnicamente se puede hacer pero no funciona como podria pensarse;
object.hasOwnProperty('prop').hasOwnProperty('prop')...;
// la segunda invocación se realiza sobre el boolean devuelto por la primera invocación;
// o sea, no sobre el mismo objeto;
adicionalmente, te recomiendo que practiques estructuración de datos y simplificación de código de forma que las tareas sean genéricas. de esta forma evitas tener que duplicar una y otra vez los códigos similares para implementarlo a diferentes elementos. por último, siempre que quieras darle seguimiento a un tema, realiza una nueva respuesta en el tema si ya ha transcurrido un largo tiempo en lugar de editar la última respuesta. así los lectores saben que hay un nuevo mensaje.