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 .last
właściwość będzie dostępna tylko dla arr
obiektu, który jest utworzony z prototypu Array. Aby więc .last
właściwość była dostępna dla wszystkich obiektów utworzonych z prototypu Array, musimy zdefiniować .last
wł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.