2012-04-12 10 views
0
function ge(id){ 
    this.id=id; 
    this.d=document; 
    this.w=window; 
    return document.getElementById(id); 
} 
ge.prototype={ 
    set_in:function(value){ 
     this.innerHTML=value; 
    }, 
    getIn:function(){ 
     return document.getElementById(this.id).innerHTML; 
    }, 
    foc:function(){ 
     document.getElementById(this.id).focus(); 
    } 
} 

ich tun möchte, ist, dass, wenn ich ge rufen (‚id‘). GETIN() in innerHTML- dieses Elements führtHat mir jemand sagen, was falsch mit diesem Code ist

+1

Was bekommen Sie stattdessen? –

+0

dieser Fehler: Kann Methode 'getIn' von null nicht aufrufen –

+1

warum nicht ein http://jsfiddle.net/ einrichten? – Jakub

Antwort

1

Sie müssen new ge("header").getIn(); anrufen, anstatt nur ge("header").getIn(); - oder eine andere Funktion erstellen, die eine neue Instanz von ge zurück - Für Ex:

function newge(id) { 
    return new ge(id); 
} 
function ge(id){ 
    this.id=id; 
    this.d=document; 
    this.w=window; 
    return this; //document.getElementById(id); 
} 
ge.prototype={ 
    set_in:function(value){ 
     this.innerHTML=value; 
    }, 
    getIn:function(){ 
     return document.getElementById(this.id).innerHTML; 
    }, 
    foc:function(){ 
     document.getElementById(this.id).focus(); 
    } 
} 
newge("header").getIn(); 
+0

Solange er ein Objekt aus dem Konstruktor zurückgibt, kann dies niemals funktionieren. – jAndy

+0

das absolut tut. Siehe diese Geige: http://jsfiddle.net/RRu89/ - Sie können eine Methode nicht aufrufen, ohne zuerst das Objekt zu instanziieren - und das war das Problem mit dem fraglichen Code. – techfoobar

+0

Kann die Eigenschaft 'innerHTML' von null nicht lesen –

2

Du bist Zurückgeben eines DOM Node in dieser Konstruktorfunktion. Ich nehme an, Sie verwenden es als Konstruktor, also überschreiben Sie die Object, die es eigentlich zurückgeben sollte.

Gerade die

return document.getElementById(id); 

überspringen und du bist gut. Sie können diese Knotenreferenz stattdessen in einem Wert von this.myRef speichern.


Nachdem Sie entfernt, dass return Anweisung, müssen Sie eine Instanz erstellen. Wie

var myGE = new ge('id'); 

und dann kann man schließlich rufen

myGE.getin(); 
+0

Ich tat dies, aber es funktioniert immer noch nicht –

+0

@BhavikPatel: siehe aktualisierte Antwort bitte. – jAndy

+0

aber ich möchte nicht jedes Mal Objekt erstellen –

Verwandte Themen