Die Frage scheint bereits beantwortet zu sein, aber das OP möchte auf die Klasse und das Objekt zugreifen, genau wie wir es in Java tun, und die ausgewählte Antwort reicht nicht aus (imho).
Mit der folgenden Erklärung können wir eine Klasse eines Objekts erhalten (in Javascript heißt es tatsächlich Prototyp).
var arr = new Array('red', 'green', 'blue');
var arr2 = new Array('white', 'black', 'orange');
Sie können eine Eigenschaft wie folgt hinzufügen:
Object.defineProperty(arr,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
Die .last
Eigenschaft ist jedoch nur für arr
Objekte verfügbar, die vom Array-Prototyp instanziiert wurden. Damit die .last
Eigenschaft für alle vom Array-Prototyp instanziierten Objekte verfügbar ist, müssen wir die .last
Eigenschaft für den Array-Prototyp definieren:
Object.defineProperty(Array.prototype,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
Das Problem hierbei ist, dass Sie wissen müssen, zu welchem Objekttyp (Prototyp) die Variablen ' arr
' und ' arr2
' gehören! Mit anderen Worten, wenn Sie den Klassentyp (Prototyp) des arr
Objekts ' ' nicht kennen , können Sie keine Eigenschaft für dieses Objekt definieren. Im obigen Beispiel wissen wir, dass arr eine Instanz des Array-Objekts ist. Deshalb haben wir Array.prototype verwendet, um eine Eigenschaft für Array zu definieren. Aber was wäre, wenn wir die Klasse (den Prototyp) des ' arr
' nicht kennen würden ?
Object.defineProperty(arr.__proto__,'last2', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
Wie Sie sehen können, können arr
wir , ohne zu wissen, dass ' ' ein Array ist, eine neue Eigenschaft hinzufügen, indem wir nur die Klasse des ' arr
' mit ' arr.__proto__
' referenzieren.
Wir haben auf den Prototyp des ' arr
' zugegriffen , ohne zu wissen, dass es sich um eine Instanz von Array handelt, und ich denke, das hat OP gefragt.