Câu hỏi dường như đã được trả lời nhưng OP muốn truy cập vào lớp và đối tượng, giống như chúng ta làm trong Java và câu trả lời được chọn là không đủ (imho).
Với lời giải thích sau đây, chúng ta có thể có được một lớp của một đối tượng (nó thực sự được gọi là nguyên mẫu trong javascript).
var arr = new Array('red', 'green', 'blue');
var arr2 = new Array('white', 'black', 'orange');
Bạn có thể thêm một tài sản như thế này:
Object.defineProperty(arr,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
Nhưng thuộc .last
tính sẽ chỉ khả dụng cho arr
đối tượng '' được khởi tạo từ nguyên mẫu Array. Vì vậy, để có .last
sẵn thuộc tính cho tất cả các đối tượng được khởi tạo từ nguyên mẫu Array, chúng ta phải xác định thuộc .last
tính cho nguyên mẫu Array:
Object.defineProperty(Array.prototype,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
Vấn đề ở đây là, bạn phải biết loại đối tượng (nguyên mẫu) mà các biến ' arr
' và ' arr2
' thuộc về! Nói cách khác, nếu bạn không biết loại lớp (nguyên mẫu) của arr
đối tượng '', thì bạn sẽ không thể xác định một thuộc tính cho chúng. Trong ví dụ trên, chúng ta biết mảng là đối tượng của đối tượng Array, đó là lý do tại sao chúng ta sử dụng Array.prototype để định nghĩa một thuộc tính cho Array. Nhưng nếu chúng ta không biết lớp (nguyên mẫu) của ' arr
' thì sao?
Object.defineProperty(arr.__proto__,'last2', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
Như bạn có thể thấy, mà không biết rằng ' arr
' là một Mảng, chúng ta có thể thêm một thuộc tính mới chỉ cần tham chiếu lớp của ' arr
' bằng cách sử dụng ' arr.__proto__
'.
Chúng tôi đã truy cập nguyên mẫu của ' arr
' mà không biết rằng đó là phiên bản của Array và tôi nghĩ đó là những gì OP yêu cầu.