Кажется, вопрос уже получен, но ОП хочет получить доступ к классу и объекту, как мы делаем в 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
', не зная, что это экземпляр Array, и я думаю, что об этом спросил OP.