Argumentnamen aus nativem Code auslesen?

Ortwin1st

Mitglied
Hallo,

wie kann man Argumentnamen aus nativen Funktionen auslesen? Beispielsweise:
Code:
console.log(window.open); // Ausgabe im FF: function open() {  [native code] }
 
Soweit ich weiß, ist das nicht möglich.

Du kannst allerdings die Anzahl der Argumente (sprich welche bei der Deklaration angegeben wurden) bestimmen:
Javascript:
alert(window.open.length);


PS: Wozu brauchst du das überhaupt?
 
Laut MDN sollte es seit ECMAScript 1st Edition (JS 1.1) implementiert sein.

Das Problem ist hierbei jedoch, dass du es mit nativen Funktionen testest. Probiere mal dieses jsFiddle, welches in allen Browsern funktionieren müsste.


PS: alert(window.setTimeout.length); gibt mir in Chrome 1 aus.
 
Hallo

Das Problem bei nativen Funktionen ist folgendes, in v8 (JS-Engine von Chrome) kommt ein natives callback zum beispiel folgendermassen daher:
C++:
v8::Handle<v8::Value> __cdecl nativeMethodCallback(const v8::Arguments& args) {
         int32 value = args[0].ToInt32Value();
         for(int32 i = 0; i < value; ++i) {
                v8::Handle<v8::String> str = args[i + 1].ToString();
                // ...
         }
         return v8::Undefined();
}

Das wäre in dem Fall über ganz viele Varianten aufrufbar (nehmen wir an die Funktion sei einem Wert mit key 'nativeFunc' zugeordnet)
Java:
doc.nativeFunc(1, "FirstString");
doc.nativeFunc(2, "FirstString", "SecondString");
// ...

Das Problem ist also, dass es häufig gar nicht wirklich zu sagen ist wie viele Argumente die Funtion erwartet, wenn sie native ist.

Grüsse
Cromon
 
Das erklärt vllt. das Verhalten von Opera/Chrome (hab relativ alte, portable Versionen)

Das ist ein generelles Problem von arguments. (siehe auch http://javascriptweblog.wordpress.com/2011/01/18/javascripts-arguments-object-and-beyond/#more-1990)

Theoretisch müssen ja gar keine Parameternamen vergeben sein, weil man über arguments[n] darauf zugreifen kann.

EDIT: Naja gut, könnte mit der Collection auch im FF so implementiert sein. :-) Das length Attribut kann ja dann noch immer beliebig gesetzt werden.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück