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 .last
proprietà sarà disponibile solo per ' arr
' l'oggetto che è istanziato dal prototipo Array. Quindi, per avere la .last
proprietà da rendere disponibile per tutti gli oggetti istanziati dal prototipo di array, dobbiamo definire la .last
proprietà 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) arr
dell'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.