На питання, здається, вже відповіли, але ОП хоче отримати доступ до класу та об'єкта, як у нас на 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
', не знаючи, що це екземпляр масиву, і я думаю, що це запитало ОП.