La domanda sembra già risposta ma l'OP vuole accedere alla classe di e all'oggetto, proprio come facciamo in Java e la risposta selezionata non è sufficiente (imho).
Con la seguente spiegazione, possiamo ottenere una classe di un oggetto (in realtà è chiamato prototipo in javascript).
var arr = new Array('red', 'green', 'blue');
var arr2 = new Array('white', 'black', 'orange');
Puoi aggiungere una proprietà come questa:
Object.defineProperty(arr,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
Ma la .lastproprietà sarà disponibile solo per ' arr' l'oggetto che è istanziato dal prototipo Array. Quindi, per avere la .lastproprietà da rendere disponibile per tutti gli oggetti istanziati dal prototipo di array, dobbiamo definire la .lastproprietà per il prototipo di array:
Object.defineProperty(Array.prototype,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
Il problema qui è che devi sapere a quale tipo di oggetto (prototipo) appartengono le variabili ' arr' e ' arr2'! In altre parole, se non conosci il tipo di classe (prototipo) arrdell'oggetto ' ', non sarai in grado di definire una proprietà per loro. Nell'esempio sopra, sappiamo che arr è un'istanza dell'oggetto Array, ecco perché abbiamo usato Array.prototype per definire una proprietà per Array. E se non conoscessimo la classe (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
Come puoi vedere, senza sapere che " arr" è un array, possiamo aggiungere una nuova proprietà semplicemente facendo riferimento alla classe di " arr" usando " arr.__proto__".
Abbiamo avuto accesso al prototipo di " arr" senza sapere che si tratta di un'istanza di array e penso che sia stato ciò che OP ha chiesto.