L'oggetto eredita da Function.prototype che a sua volta eredita da Object.prototype.Javascript :: Perché Object.hasOwnProperty ('caller') restituisce true?
questo è perché internamente, oggetto è in realtà una funzione
function Object(){[native code]}
, che è il motivo per cui siamo in grado di scrivere codice come
var ob=new Object();
oggetto eredita immobili come 'chiamante', 'arity', ecc da Function.prototype
Tuttavia (e questo è ciò che è fonte di confusione)
alert(Object.hasOwnProperty('caller')); //returns TRUE ! surprising
non dovrebbe restituire false poiché Object eredita effettivamente la proprietà 'chiamante' da Function.prototype?
Allo stesso modo
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
Così, qualcuno ha qualche idea sul perché questo sta accadendo?
grazie mille. Spero di non sto suonando ingenuo
EDIT
cercando Object.getOwnPropertyNames(Object)
infatti tornato 'caller'
come una proprietà direttamente sul oggetto in sé. Quindi
Ma, ora la domanda è perché nella documentazione MDN, 'caller'
è menzionato come ereditato dalla funzione. Quindi è sicuramente fonte di confusione.
Quindi questo è un errore nella documentazione? grazie.
EDIT-2
Posso giungere alla conclusione che oggetto ha le proprie
caller
, length
, ecc proprietà come anche Object.length
e Object.__proto__.length
non è la stessa. Avrebbe dovuto essere uguale se effettivamente oggetto è stato ereditando proprietà length dalla sua [[prototype]]
, cioè Function.prototype
ma non è il caso
Il fatto è che il motivo per cui lo fa MDN menzione quell'oggetto solo eredita caller
, length
, arity
, ecc dalla sua [[prototype]]
oggetto ? è un po 'fuorviante IMHO
In quale motore browser/JS viene eseguito 'Object.hasOwnProperty ('caller')' yield 'true'? Non riesco a riprodurre in Opera. – Bergi
@Bergi in Firefox corrente ad esempio – dsuckau
anche in chrome. – Sarabjeet