Đối tượng kế thừa từ Function.prototype mà lần lượt kế thừa từ Object.prototype.Javascript :: Tại sao Object.hasOwnProperty ('người gọi') trả về true?
này là bởi vì trong nội bộ, đối tượng thực sự là một chức năng
function Object(){[native code]}
đó là lý do chúng ta có thể viết mã như
var ob=new Object();
Object được thừa hưởng tài sản như 'gọi', 'arity', vv từ Function.prototype
Tuy nhiên (và đây là điều gây nhầm lẫn)
alert(Object.hasOwnProperty('caller')); //returns TRUE ! surprising
không được trả về false vì Object thực sự thừa kế thuộc tính 'người gọi' từ Function.prototype?
Cùng một cách
alert(Function.hasOwnProperty('caller'));
/*returns True. expected 'false' as Function object has no property of its own and inherits everything from Function.prototype*/
alert(Number.hasOwnProperty('caller')); //again returns true, unexpectedly
Vì vậy, ai đó có bất kỳ ý tưởng về việc tại sao điều này xảy ra?
cảm ơn bạn rất nhiều. Tôi hy vọng tôi không nghe có vẻ ngây thơ
EDIT
cố gắng Object.getOwnPropertyNames(Object)
thực sự trở 'caller'
như một thuộc tính trực tiếp trên bản thân đối tượng. Vì vậy, Object.hasOwnProperty('caller')
là thực tế chính xác
Nhưng, bây giờ câu hỏi là lý do tại sao trong tài liệu MDN, 'caller'
được đề cập là được kế thừa từ Hàm. Vì vậy, nó chắc chắn dẫn đến sự nhầm lẫn.
Vì vậy, đây có phải là một số sai lầm trong tài liệu không? cảm ơn bạn.
EDIT-2
Tôi có thể đi đến kết luận rằng đối tượng có riêng của mình
caller
, length
, vv thuộc tính như thậm chí Object.length
và Object.__proto__.length
là không giống nhau. Nó cần phải có được bằng nếu thực sự đối tượng được thừa kế tài sản dài từ [[prototype]]
của nó, tức là Function.prototype
nhưng nó không phải là trường hợp
Vấn đề là tại sao MDN đề cập rằng Object chỉ thừa hưởng caller
, length
, arity
, vv từ đối tượng [[prototype]]
của nó ? của nó một chút sai lệch IMHO
Trong đó trình duyệt/JS engine nào 'Object.hasOwnProperty ('caller')' yield 'true'? Tôi không thể tái sản xuất trong Opera. – Bergi
@Bergi trong Firefox hiện tại, ví dụ: – dsuckau
trong chrome. – Sarabjeet