Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Javascript array prototyping in namespace

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Javascript array prototyping in namespace

    Hallo zusammen,

    ich versuche mich gerade daran, einen array prototypen in einen namespace zu setzen. Also praktisch auf arrays in einem namespace anzuwenden und nicht global. Geht das überhaupt?? Ich werde leider mit Fehlern beschossen
    Hier ein kurzes Beispiel.

    Code:
    var FooBar = {};
    FooBar.einArray = [];
    
    Array.prototype.in_array = function(needle) {
        for (var i = 0; i < this.length; i++) {
            if (this[i] == needle) {
                return true;
            }
            else {
                if (typeof(this[i]) === "object") {
                    if (this[i].in_array(needle)) {
                        return true;
                    }
                }
            }
        }
        return false;
    }
    Grüße


    In der Form habe ich mich bisher daran probiert:

    Code:
    FooBar.einArray.prototype.in_array = function (needle) {}
    Basti
    I like cooking my family and my pets.
    Use commas. Don't be a psycho.
    [URL="http://jscouch.de"]Blog[/URL] - [URL="http://coverflowjs.github.io/coverflow/"]CoverflowJS[/URL]

  • #2
    nein. Das objekt array ist eine globale Variable.

    Kommentar


    • #3
      Habe einen interessanten Artikel von Dean Edwards gefunden, der genau das macht. Allerdings erzeugt er noch zusätzlich einen unsichtbaren iframe. Da man bei seinem ursprünglichen Vorschlag nicht mit length arbeiten kann, hab ich es mit count erweitert. for in funktioniert nicht, allerdings klappt forEach.

      Hier eine Lösungsmöglichkeit:

      Code:
      var Array2 = function() {};
      Array2.prototype = [];
      
      Array2.prototype.count = function() {
          var a = 0;
          this.forEach(function (val) {
              a++;
          });
          return a;
      }
      
      function debug($obj) {
          if (window.console && window.console.log) {
              console.log('myArray: ' + $obj.count());
              console.log($obj);
          }
      };
      
      var test = {}
      test.list = new Array2;
      test.list.push(123);
      test.list.push(789);
      debug(test.list);

      groß getestet hab ichs aber noch nicht, finde ich aber dennoch sehr praktisch und einfach genial, die Idee.

      grüße
      I like cooking my family and my pets.
      Use commas. Don't be a psycho.
      [URL="http://jscouch.de"]Blog[/URL] - [URL="http://coverflowjs.github.io/coverflow/"]CoverflowJS[/URL]

      Kommentar

      Lädt...
      X