A pergunta parece já respondida, mas o OP deseja acessar a classe e o objeto, assim como fazemos em Java e a resposta selecionada não é suficiente (imho).
Com a seguinte explicação, podemos obter uma classe de um objeto (na verdade, é chamado de protótipo em javascript).
var arr = new Array('red', 'green', 'blue');
var arr2 = new Array('white', 'black', 'orange');
Você pode adicionar uma propriedade como esta:
Object.defineProperty(arr,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
Mas a .last
propriedade estará disponível apenas para arr
o objeto que é instanciado a partir do protótipo Array. Portanto, para que a .last
propriedade esteja disponível para todos os objetos instanciados no protótipo Array, precisamos definir a .last
propriedade para o protótipo Array:
Object.defineProperty(Array.prototype,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
O problema aqui é que você precisa saber a que tipo de objeto (protótipo) as variáveis ' arr
' e ' arr2
' pertencem! Em outras palavras, se você não souber o tipo de classe (protótipo) do arr
objeto ' ', não poderá definir uma propriedade para eles. No exemplo acima, sabemos que arr é uma instância do objeto Array, por isso usamos Array.prototype para definir uma propriedade para Array. Mas e se não conhecêssemos a classe (protótipo) do ' arr
'?
Object.defineProperty(arr.__proto__,'last2', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
Como você pode ver, sem saber que ' arr
' é uma matriz, podemos adicionar uma nova propriedade apenas referindo a classe de ' arr
' usando 'arr.__proto__
'.
Acessamos o protótipo do ' arr
' sem saber que é uma instância do Array e acho que foi o que o OP pediu.