Ergebnis 1 bis 7 von 7

Thema: Extending "arguments"

  1. #1
    Quantenmechaniker
    Registriert seit
    Aug 2002
    Beiträge
    1.997
    Renommee
    283

    Extending "arguments"

    Moin,

    ich möchte (in JavaScript) gerne das "arguments"-Objekt erweitern oder eine alternative Funktion schreiben, um wie folgt auf Funktions-Parameter zugreifen zu können.

    Code:
    function test()
    {
    	var name = [arguments.]pop("string", true);
    	var callback = pop("function", false, function() { console.log(arguments.length.toString(); });
    	var cbArgs = pop("array");
    }
    Im Prinzip wäre am besten die Angabe ohne ständige "arguments"-Wiederholung sowie ohne "arguments"-Parameter an "pop()" o.ä.

    In diesem Sinne möchte ich, dass der erste "pop()"-Parameter einem Type-Check dient, ob der Übergabe-Type gültig ist (sonst Exception),
    während der zweite (boolean) definiert, ob das Argument überhaupt notwendig ist - also bei "false"-Übergabe kann in diesem Beispiel das
    "arguments"-Objekt (ist kein echtes Array, btw) nur einen Inhalt zählen. Und zum Schluss noch möglich: ein alternativer Wert, welcher nun
    eingesetzt wird, falls eines der Argumente nicht definiert ist (wenn es also gerade optional ist).

    Nun, eine zweite Frage wäre, ob sich auf die gleiche Weise evtl. auch automatisiert die Umwandlung in ein echtes Array gestalten lässt, und
    ob das evtl. überhaupt sinnvoll ist. Wer's noch nicht wusste:

    Code:
    [].slice.call(arguments);
    Macht aus dem regulären "arguments"-Objekt ein echtes Array.

    Danke so weit, schöne Grüße; der kuchen.
    Geändert von kuchen (04.12.2017 um 06:15 Uhr)

    1 2 3 4 5 6 7 8
    2 1 4 3 6 5 8 7
    3 4 1 2 7 8 5 6
    4 3 2 1 8 7 6 5
    5 6 7 8 1 2 3 4
    6 5 8 7 2 1 4 3
    7 8 5 6 3 4 1 2
    8 7 6 5 4 3 2 1

  2. #2
    Registered User
    Registriert seit
    Sep 2008
    Beiträge
    403
    Renommee
    270

    AW: Extending "arguments"

    Yo Kuchen, schön, dass du immer noch hier bist

    "arguments" ist ja vom Typ "Arguments", aber der Typ ist "versteckt". Um jedoch eine "Klasse" in JavaScript zu erweitern, muss man neue Methoden in den Prototype eintragen.

    Das einfachste, was jedoch nicht möglich ist, wäre:

    Code:
    Arguments.prototype.debug = function() { console.log("Wir haben", this.length, "Argumente"); }
    Aber JavaScript ist ja extrem dynamisch, wir können ein bisschen cheaten... wir klauen uns erstmal eine Arguments-Instanz:

    Code:
    args = function() { return arguments; }()
    Die Instanz "args" hat nun eine Referenz zum Prototypen... genau was wir brauchen, in "args.__proto__".

    Darüber kann man jetzt neue Arguments-Methoden implementieren, z.B.:

    Code:
    args.__proto__.debug = function() { console.log("Wir haben", this.length, "Argumente"); }
    Die debug-Methode hast du jetzt in jeder Funktion, in jedem arguments. Zum Beispiel machste eine neue Funktion:

    Code:
    test123 = function(a,b,c) {
    	arguments.debug()
    }
    
    test123(1,2) // Console: Wir haben 2 Argumente
    Eventuell hilft dir das ja erstmal weiter, wäre auch gut, wenn du die Frage noch etwas ausführst. Liest sich sehr interessant, aber kann da noch nicht viel konkretes von ableiten.
    Über das neue Zeitalter der Gehirne eines Menschen!
    echo 'main() { char z[] = "ping "; for(;printf(z);z[1]^=6); }' > a.c; gcc a.c -o a; ./a # 16.11.2011 02:51

  3. #3
    Quantenmechaniker
    Registriert seit
    Aug 2002
    Beiträge
    1.997
    Renommee
    283

    AW: Extending "arguments"

    Code:
    ReferenceError: Arguments is not defined
    Ich wüsste auch nicht, dass "arguments" das als Basis-Klasse hätte.

    Dein Rest klingt aber schonmal ganz nett. Ich schaue mir das später mal genauer an. THX so far!

    1 2 3 4 5 6 7 8
    2 1 4 3 6 5 8 7
    3 4 1 2 7 8 5 6
    4 3 2 1 8 7 6 5
    5 6 7 8 1 2 3 4
    6 5 8 7 2 1 4 3
    7 8 5 6 3 4 1 2
    8 7 6 5 4 3 2 1

  4. #4
    Quantenmechaniker
    Registriert seit
    Aug 2002
    Beiträge
    1.997
    Renommee
    283

    AW: Extending "arguments"

    SUUUPPIII! Vielen lieben Dank, gruena!! Es funktioniert genau so, wie du beschrieben hast! :-D´

    Leider krieg' ich das nicht so einfach hin, durch ".prototype = Array.prototype" o.ä. das "arguments" grundsätzlich zum Array zu machen.

    Aber egal; so weit, so gut. Falls du interessiert bist, ich habe meine eigene "/lib.js"-Erweiterung (also für "Node.js"-JavaScript) schon auf
    "GitHub". Dummerweise ist das meißte, bisherige verloren gegangen, muss also nochmal von vorne anfangen. Nya~ wird scho.

    Vielleicht hast du ja Ideen oder Verbesserungen o.ä. für den folgenden Link: < https://github.com/maschinenstadt/lib.js >

    Schöne Grüße; der Kuchen. :-)´

    1 2 3 4 5 6 7 8
    2 1 4 3 6 5 8 7
    3 4 1 2 7 8 5 6
    4 3 2 1 8 7 6 5
    5 6 7 8 1 2 3 4
    6 5 8 7 2 1 4 3
    7 8 5 6 3 4 1 2
    8 7 6 5 4 3 2 1

  5. #5
    Quantenmechaniker
    Registriert seit
    Aug 2002
    Beiträge
    1.997
    Renommee
    283

    AW: Extending "arguments"

    Hello again.

    Ich suche eine Möglichkeit, eine eigene Funktion zu verwenden, wenn ich auf Objekte bzw. ihre Attribute zugreife (Accessoren?).

    Ich möchte also auf die Objekt-Attribute regulär zugreifen ("object.attribute = value" oder "object.function()"), sie aber aus meinem
    Dateisystem dabei holen. Sprich, ein "override" im Object.LookUp() quasi.

    Geht das so; evtl. durch get/set-Accessoren, wenn ich diese mit dem gesamten Objekten statt nur einzelnen Attributen verbinde?

    Grüßle; ...

    1 2 3 4 5 6 7 8
    2 1 4 3 6 5 8 7
    3 4 1 2 7 8 5 6
    4 3 2 1 8 7 6 5
    5 6 7 8 1 2 3 4
    6 5 8 7 2 1 4 3
    7 8 5 6 3 4 1 2
    8 7 6 5 4 3 2 1

  6. #6
    Quantenmechaniker
    Registriert seit
    Aug 2002
    Beiträge
    1.997
    Renommee
    283

    AW: Extending "arguments"

    Ein ähnliches Problem kommt noch dazu. Wobei ich mich frage, ob die Lösung evtl. in "Proxy" liegt?

    So möchte ich auf meine Arrays und Strings mit eigener Funktion so zugreifen, dass ich gewohnt "array[index]" o.ä. angeben kann;
    jedoch akzeptiert meine Funktion hierzu auch negative Werte (zur Rückwärts-Zählung ab Ende == -1) sowie größere Werte, die ich
    via Modulo-Operator ( index % this.length ) begrenze. Und dazu noch den Zugriff mit Start-Index sowie Längen-Angabe, wobei hier
    einerseits eine negative Länge das Ergebnis-Array aus Rückwärts-Zählung generiert und eine Angabe mit größerem Index als das
    Array hergibt sorgt für eine (Modulo-)"Wiederholung". Egal, Detail-Sache. Jedenfalls:

    Ich möchte deswegen jetzt noch kein eigenes Scripting anfangen, aber das trotzdem irgendwie so einbauen, dass ich nicht ständig
    extra noch besagte eigene Funktion mit in den Code einbauen muss. Sprich, sie sollte automatisch umgesetzt werden, durch ganz
    regulären Zugriff via ... (a) `array[index]` oder .. (b) `array[start, length]`.

    OffTopic:
    Bin jetzt kurz davor, dass meine Software sich selbst automatisch in ein neuronales Netz umwandelt, jfyi. Ich möchte dazu meine
    "Library-Extension(s)" stets nutzen, wenn ich mit "Node.js" arbeite. Leider funktioniert die manuelle Einbindung noch nicht ganz, was
    mich verwundert: wenn ich `npm install maschinenstadt` eingebe (>1<), so installiert sich das Ganze - aber ich kann in keinem Script
    einfach `require('maschinenstadt')" verwenden - wird nicht gefunden, auch wenn "node_modules/" korrekt erreichbar ist.

    (>1<) PS: ich bin auch nicht sicher, wie ich das alles jetzt noch als npm-Modul "lib.js" nennen kann. Dieser Name ist theoretisch noch
    nicht genutzt, evtl. hatte ich da anfangs einen Fehler gemacht? Kann ich das noch irgendwie dahingehend ändern?


    => https://kekse.biz/?page:lib.js

    OffTopic:
    PPS: Das alte Problem (siehe das vorhergehende Posting) bleibt. So möchte ich nämlich alle Objekt-(Attribute-)Zugriffe mit Hilfe
    von Dateisystem oder Datenbank selbst regulieren - ähnlich wie hier mit Array-Index-Zugriff-Funktion, nur weiter für ganze Objekte
    mit ihren Member-Attributen.

    Ein Grund ist der, dass ich mir verspreche, evtl. effizientere OO-Zugriffe zu erreichen, wenn nicht mehr immer nur JavaScript-interne
    Zugriffe auf "Object" erfolgen, sondern ich eben virtuelle Objekte durch Datenbank-Tabellen etc. verwende.


    LG; Kekse.

    1 2 3 4 5 6 7 8
    2 1 4 3 6 5 8 7
    3 4 1 2 7 8 5 6
    4 3 2 1 8 7 6 5
    5 6 7 8 1 2 3 4
    6 5 8 7 2 1 4 3
    7 8 5 6 3 4 1 2
    8 7 6 5 4 3 2 1

  7. #7
    Quantenmechaniker
    Registriert seit
    Aug 2002
    Beiträge
    1.997
    Renommee
    283

    AW: Extending "arguments"

    Erschwerend kommt auch noch hinzu, dass ich gerne eine eigene "Number"-Implementation einbinden möchte,
    und das so, dass ich wie auf reguläre Zahlen zugreifen kann - also mitsamt Operatoren usw. ... nur dass ich auf
    der einen Seite "BigNumber" möchte (also beliebig große Zahlen) und auf der anderen Seite nun mit beliebigen
    Zahlensystemen arbeiten möchte, indem ich vor jeder Zahl (optional) jetzt noch (so ähnlich wie Type-Casting)
    in Klammern das zu verwendende System (von 1/2 bis 255/256) angeben möchte ("var zahl = (2)1101") etc. ...

    Ich vermute ganz stark, für alle obigen Anforderungen sollte ich schon eigenes Scripting implementieren (oben
    schon verlangter Grund besteht also schon - fast), aber das sehe ich nicht ganz ein, da ich ... (a) alle zukünftigen
    Software-/Library-Erweiterungen passend für ein neuronales Netz eingebe, das eben alles anders umsetzt - wo
    regulärer Script-Code nicht mehr nötig ist ... sowie ... (b) weil ich dank "npm.js"-Modulen gute Erweiterungen mit
    an den Start bringen kann, was bei eigenem Scripting nicht ganz so leicht ist (wenn z.B. "npm.js" durch C-Codes
    weitere Module einbringt).

    1 2 3 4 5 6 7 8
    2 1 4 3 6 5 8 7
    3 4 1 2 7 8 5 6
    4 3 2 1 8 7 6 5
    5 6 7 8 1 2 3 4
    6 5 8 7 2 1 4 3
    7 8 5 6 3 4 1 2
    8 7 6 5 4 3 2 1

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. "Überlichtgeschwindigkeit" im Hollywood-Film "Event Horizon"
    Von 45PrivateSnafo im Forum Naturwissenschaften & Elektronik
    Antworten: 22
    Letzter Beitrag: 30.10.2009, 13:45
  2. Antworten: 2
    Letzter Beitrag: 14.09.2003, 12:09
  3. Antworten: 0
    Letzter Beitrag: 08.01.2003, 15:02
  4. Antworten: 1
    Letzter Beitrag: 03.01.2003, 13:53
  5. App.Path & "\" & "Kunden" & "\" & File1 Fehler ?
    Von Witec im Forum VisualBasic / VBScript
    Antworten: 5
    Letzter Beitrag: 29.04.2002, 21:15

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •