Pytanie wydaje się już udzielone, ale OP chce uzyskać dostęp do klasy i obiektu, tak jak robimy to w Javie, a wybrana odpowiedź nie jest wystarczająca (imho).
Dzięki poniższemu wyjaśnieniu możemy uzyskać klasę obiektu (tak naprawdę w javascript nazywa się to prototypem).
var arr = new Array('red', 'green', 'blue');
var arr2 = new Array('white', 'black', 'orange');
Możesz dodać taką właściwość:
Object.defineProperty(arr,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
Ale .lastwłaściwość będzie dostępna tylko dla arrobiektu, który jest utworzony z prototypu Array. Aby więc .lastwłaściwość była dostępna dla wszystkich obiektów utworzonych z prototypu Array, musimy zdefiniować .lastwłaściwość dla prototypu Array:
Object.defineProperty(Array.prototype,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
Problem polega na tym, że musisz wiedzieć, do jakiego typu obiektu (prototypu) należą zmienne „ arr” i „ arr2”! Innymi słowy, jeśli nie znasz typu klasy (prototypu) obiektu „ arr”, nie będziesz w stanie zdefiniować dla nich właściwości. W powyższym przykładzie wiemy, że arr jest instancją obiektu Array, dlatego użyliśmy Array.prototype do zdefiniowania właściwości dla Array. Ale co, jeśli nie znamy klasy (prototypu) „ arr”?
Object.defineProperty(arr.__proto__,'last2', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
Jak widać, nie wiedząc, że „ arr” jest tablicą, możemy dodać nową właściwość, po prostu odwołując się do klasy „ arr” za pomocą „ arr.__proto__”.
Udało nam się uzyskać dostęp do prototypu „ arr”, nie wiedząc, że jest to instancja Array i myślę, że o to poprosił OP.