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