На питання, здається, вже відповіли, але ОП хоче отримати доступ до класу та об'єкта, як у нас на Java, і вибраної відповіді недостатньо (imho).
Слідуючи наступному поясненню, ми можемо отримати клас об’єкта (насправді він називається прототипом у javascript).
var arr = new Array('red', 'green', 'blue');
var arr2 = new Array('white', 'black', 'orange');
Ви можете додати властивість на зразок цієї:
Object.defineProperty(arr,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
Але .lastвластивість буде доступна лише arrоб'єкту ' ', який створений з прототипу Array. Отже, щоб мати .lastвластивість доступною для всіх об'єктів, створених з прототипу Array, ми повинні визначити .lastвластивість для прототипу Array:
Object.defineProperty(Array.prototype,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
Проблема тут полягає в тому, що ви повинні знати, до якого типу об’єкта (прототипу) належать змінні ' arr' і ' arr2'! Іншими словами, якщо ви не знаєте тип класу (прототип) об’єкта ' arr', ви не зможете визначити властивість для них. У наведеному вище прикладі ми знаємо, що arr - це примірник об'єкта Array, тому ми використовували Array.prototype для визначення властивості для Array. Але що робити, якщо ми не знали клас (прототип) ' arr'?
Object.defineProperty(arr.__proto__,'last2', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
Як ви бачите, не знаючи, що " arr" є масив, ми можемо додати нову властивість, просто посилаючись на клас класу " arr", використовуючи " arr.__proto__".
Ми отримали доступ до прототипу ' arr', не знаючи, що це екземпляр масиву, і я думаю, що це запитало ОП.