2012-05-05 38 views
5

Có, tôi đã thấy câu hỏi này và được trả lời trước đây. Nhưng đây là những gì tôi vẫn không hiểu:Còn một "cách tìm tên lớp/hàm tạo của đối tượng Javascript"?

Nếu tôi tạo hàm dựng và không ghi đè thuộc tính prototype của hàm, thì chúng tôi có thuộc tính tự động constructor treo thuộc tính prototype của hàm. Đó là MyConstructor.prototype.constructor === MyConstructor => true. Tuyệt quá. Nhưng bây giờ điều gì sẽ xảy ra khi tôi ghi đè lên prototype với đối tượng của riêng mình và không sửa đổi thuộc tính constructor? constructor hiện không tồn tại trên prototype và nếu được tham chiếu chỉ tìm thấy chuỗi mẫu thử nghiệm, đó là MyConstructor.prototype.constructor === Object => true. Khỏe. Vì vậy ...

Tại sao trong trình gỡ lỗi Javascript (như Chrome), nếu tôi ghi đè nguyên mẫu của một hàm tạo với đối tượng của riêng tôi và tạo mới một cá thể của hàm tạo đó, sau đó nhập biến mẫu đó trên lệnh dòng, Chrome vui vẻ nói với tôi loại? Làm thế nào nó biết? I E. tôi có thể làm gì để tìm ra điều tương tự thông qua mã?

Simple repro:

> function Foo() {} 
undefined 
> Foo.prototype.constructor === Foo 
true 
> Foo.prototype = {} 
Object 
> Foo.prototype.constructor === Foo 
false 
> f = new Foo() 
Foo 
> f 
Foo 

Có tinh khiết debugger kỳ diệu?

+0

Hiệp hội vẫn còn ở đâu đó - vì 'f instanceof Foo' trả về' true' - nhưng tôi không nghĩ rằng nó được hiển thị với mã người dùng. Whcih tôi đoán làm cho nó tinh khiết debugger ma thuật. –

+1

Điều này dường như có liên quan g13n

+0

firefox dường như thiếu ma thuật trình gỡ lỗi vì f = new Foo() và f dòng đều trả về [object Object] mà câu trả lời được liên kết ở trên giải thích – nvuono

Trả lời

0

Có lẽ giải pháp chỉ đơn giản là để không đặt nguyên mẫu cho đối tượng tùy chỉnh của bạn? Bạn có thể lặp qua tất cả các thuộc tính của đối tượng tùy chỉnh của bạn và thêm chúng làm các thuộc tính cho nguyên mẫu hiện có, do đó giữ lại tất cả các thuộc tính của đối tượng nguyên mẫu ban đầu, chẳng hạn như hàm tạo.

+0

Điều đó, hoặc thêm một thuộc tính vào đối tượng nguyên mẫu tùy chỉnh của bạn giữ một tham chiếu đến hàm hàm dựng, hoặc thậm chí chỉ đơn giản là một số chuỗi tùy chỉnh hoặc một cái gì đó mà bạn có thể kiểm tra ... – JKing

Các vấn đề liên quan