2016-05-11 7 views
0

Ich habe Probleme beim Aufrufen der Funktion "Izpis" aus einem Array. Klasse unter:Aufruf der Funktion von Objekt in Array (JS)

function Kandidat(ime, priimek, stranka, stDelegatov) { 
    if (ime == "" || priimek == "") { 
    alert("Podatki niso popolni!"); 
    return; 
    } else { 
    this.ime = ime; 
    this.priimek = priimek; 
    this.stranka = stranka; 
    this.id = polje.length + 1; 
    this.stDelegatov = stDelegatov; 
    } 
    Izpis = function() { 
    return "(" + this.id + ")" + this.ime + " " + this.priimek + " pripada stranki " + this.stranka + "."; 
    } 
    PosodobiIzpis = function(ime, priimek, stranka, stDelegatov) { 
    this.ime = ime; 
    this.priimek = priimek; 
    this.stranka = stranka; 
    this.stDelegatov = stDelegatov; 
    } 
} 

Ich habe versucht, es wie folgt aus:

var a = []; 
a = a.concat(Isci($("#iskalniNiz"))); 
for (var i = 0; i < a.length; i++) { 
    var temp = (Kandidat)(a[i]).Izpis(); 
    $("br:eq(0)").after(temp + "\n"); 

} 

und ohne (Kandidat) ohne Erfolg. Ich bekomme entweder "ist undefined" oder "ist keine Funktion" Fehler.

+0

Was Funktion Isci() tun hat? –

+0

this.Izpis tat es für mich .. Ich hatte keine Ahnung, dass Objektfunktionen das brauchen .. danke! – tomiG

+0

Was ist Isci()? –

Antwort

0

Es sieht für mich so aus, als ob Kandidat eine Konstruktorfunktion sein soll. Die Art und Weise Sie Izpis definiert haben, ist ein wenig lückenhaft ...

Wenn Sie Izpis eine Eigenschaft einer Instanz machen möchten Sie erstellen (mit dem new Schlüsselwort), müssen Sie this.Izpis schreiben.

Wenn Sie es das Präfix nicht mit this., noch mit var, wird es eines von zwei Dingen tun:

  1. Wenn es ein global Izpis definiert, wird es diese Variable überschrieben.
  2. Wenn im aktuellen Kontext keine Variable Izpis definiert ist, wird in der Konstruktorfunktion eine neue Variable erstellt, auf die außerhalb dieses Codeblocks nicht zugegriffen werden kann.

Ein weiteres Problem, das ich in Ihrem Code zu sehen, die zunächst nicht zeigen könnte, ist, dass Sie this innerhalb der Izpis und PosodobiIzpis Funktionen sind.

Dies wird abgebrochen, sobald Sie Ihre anderen Funktionen als kandidatInstance.Izpis() aufrufen. Zum Beispiel: setTimeout(kandidatInstance.Izpis) wird nicht funktionieren.

Um dies zu beheben, kann entweder:

function YourConstructor(id) { 
    // Method 1: store 'this' context in closure 
    var self = this; 
    this.yourMethod = function() { 
    return self.id; 
    }; 

    // Method 2: explicitly bind 'this' context 
    this.yourMethod2 = function() { 
    return this.id; 
    }.bind(this); 
}; 

// Method 3: use prototype 
YourConstructor.prototype.yourMethod3 = function() { 
    return this.id; 
}; 
Verwandte Themen