2013-03-29 16 views

Trả lời

0
a = new Number(12); 
a.constructor.prototype.isPrototypeOf(a) // prints 'true' 

Tôi không đủ thông minh để cho bạn biết lý do tại sao tôi chỉ biết rằng đây là cách nó là. Và có, nó là lạ.

Bây giờ, bạn có thể nói "12 là nguyên thủy và new Number(12) là một đối tượng". Nhưng làm thế nào để bạn giải thích điều này?

(12).toFixed(3); // "12.000" 

Dường như một nơi nào đó JavaScript đang quyết định nguyên thủy cũng có thể là một đối tượng.

Tại sao sự khác biệt này tồn tại? Làm thế nào để bạn chuyển đổi giữa hai hình thức? Điều này ảnh hưởng đến hiệu suất như thế nào? Tất cả các câu hỏi liên quan đến câu hỏi này mà tôi không có câu trả lời.

+0

Điều này không trả lời được câu hỏi. – zzzzBov

+0

Tại sao bỏ phiếu xuống? –

+0

@zzzzBov Chắc chắn nó không nhưng đó là một quan sát thú vị và nó thực sự liên quan đến câu hỏi IMHO –

9

a = 12 tạo số nguyên thủy, không hoàn toàn giống với đối tượng Number. Nguyên thủy được ngầm đúc cho các đối tượng cho các mục đích truy cập tài sản.

a = 12; //a is a primitive 
b = new Number(12); //b is an object 
a.constructor.prototype.isPrototypeOf(a); //false because a is primitive 
b.constructor.prototype.isPrototypeOf(b); //true because b is an object 

Theo ECMAScript spec:

When the isPrototypeOf method is called with argument V, the following steps are taken:

  1. If V is not an object, return false .

số nguyên thủy là không, nói đúng ra, các đối tượng.

+0

+1 cho đặc tả ECMA làm rõ rất nhiều. –

+2

Câu trả lời hay. Điều này được minh họa thêm bởi 'Object.getPrototypeOf (12)', mà ném 'TypeError: Object.getPrototypeOf gọi là non-object'. Trong khi 'Object.getPrototypeOf (new Number (12))' trả về 'Number {}'. – jmar777

+0

vì vậy nếu 'a' không phải là một đối tượng, thì tại sao' a.constructor' hoạt động? –

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