Das Objekt erbt von Function.prototype, das wiederum von Object.prototype erbt.Javascript :: Warum Object.hasOwnProperty ('caller') True zurückgibt?
ist dies, weil intern, Objekt tatsächlich eine Funktion
function Object(){[native code]}
ist, weshalb wir Code schreiben können, wie
var ob=new Object();
Objekt erbt Eigenschaften wie ‚Anrufer‘, ‚arity‘ usw. aus Function.prototype
aber (und das ist, was verwirrend ist)
alert(Object.hasOwnProperty('caller')); //returns TRUE ! surprising
sollte es nicht false zurückgeben, da Object tatsächlich die Eigenschaft 'caller' von Function.prototype erbt?
gleiche Weise
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
also jemand eine Idee hat, warum dies geschieht?
vielen Dank. Ich hoffe, dass ich nicht naiv
EDIT
versuchen, klingen am Object.getOwnPropertyNames(Object)
tatsächlich 'caller'
als Eigenschaft direkt am Objekt selbst zurückgegeben. So Object.hasOwnProperty('caller')
ist faktisch korrekt
Aber jetzt ist die Frage, warum in MDN-Dokumentation 'caller'
als von Function geerbt erwähnt wird. So führt es definitiv zu Verwirrung.
Also ist das ein Fehler in der Dokumentation? danke.
EDIT-2
Kann ich zu dem Schluss, dass seine eigene Objekt hat
caller
, length
, etc Eigenschaften als auch Object.length
und Object.__proto__.length
ist nicht das gleiche. Es sollte gleich gewesen, wenn in der Tat Gegenstand wurde Länge Eigenschaft von seinem [[prototype]]
vererben, dh Function.prototype
aber es ist nicht der Fall
Die Sache ist, warum tut MDN erwähnt, dass nur Objekt erbt caller
, length
, arity
, etc von seinem [[prototype]]
Objekt ? es ist ein wenig irreführend, IMHO
In welcher Browser/JS-Engine hat 'Object.hasOwnProperty ('caller')' yield 'true'? Ich kann in Opera nicht reproduzieren. – Bergi
@Bergi in aktuellen Firefox zum Beispiel – dsuckau
in Chrom auch. – Sarabjeet