La pregunta parece ya respondida, pero el OP quiere acceder a la clase y al objeto, tal como lo hacemos en Java y la respuesta seleccionada no es suficiente (en mi humilde opinión).
Con la siguiente explicación, podemos obtener una clase de un objeto (en realidad se llama prototipo en javascript).
var arr = new Array('red', 'green', 'blue');
var arr2 = new Array('white', 'black', 'orange');
Puede agregar una propiedad como esta:
Object.defineProperty(arr,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
Pero la .last
propiedad solo estará disponible para arr
el objeto ' ' que se crea una instancia del prototipo de matriz. Entonces, para que la .last
propiedad esté disponible para todos los objetos instanciados del prototipo de matriz, tenemos que definir la .last
propiedad para el prototipo de matriz:
Object.defineProperty(Array.prototype,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
¡El problema aquí es que debes saber a qué tipo de objeto (prototipo) pertenecen las variables ' arr
' y ' arr2
'! En otras palabras, si no conoce el tipo de clase (prototipo) del arr
objeto ' ', no podrá definir una propiedad para ellos. En el ejemplo anterior, sabemos que arr es una instancia del objeto Array, por eso usamos Array.prototype para definir una propiedad para Array. Pero, ¿y si no supiéramos la clase (prototipo) del ' arr
'?
Object.defineProperty(arr.__proto__,'last2', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
Como puede ver, sin saber que ' arr
' es un Array, podemos agregar una nueva propiedad simplemente haciendo referencia a la clase de ' arr
' usando ' arr.__proto__
'.
Accedimos al prototipo del ' arr
' sin saber que es una instancia de Array y creo que eso es lo que preguntó OP.