zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Javascript & Ajax
Seite neu laden Problem mit JavaScript und OOP

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 10.11.2006, 17:29
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 10.11.2006
Beiträge: 32
DoktorW befindet sich auf einem aufstrebenden Ast
Frage Problem mit JavaScript und OOP

hi leute

ich beschäftige mich gerade mit javascript. dazu habe ich mir einige tutorials zu oop in javascript durchgelesen und mir die javascript-library prototype (Prototype JavaScript Framework: Class-style OO, Ajax, and more) runtergeladen.

ich versuche damit gerade eine seite zu coden, mit der man die klasse "Mensch" ändern kann und dem "Menschen" eine Aktivitaet zuweisen kann. jede sekunde wird außerdem mithilfe einer klasse überprüft, was der "Mensch" gerade macht.

Das ist der Quellcode:
test.htm:
Code:
<html>

<head>
	<title>OOP-Test</title>
	
	<script language="JavaScript" src="lib/prototype.js"></script>
	<script language="JavaScript" src="oop.js"></script>
</head>

<body onload="javascript:init();">

<div id="status">&nbsp;</div>

<br><br>

<div id="aktivitaet">&nbsp;</div>

<br><br>

Neue Aktivität: <input type="text" name="neue_aktivitaet"><button onclick="javascript:meinMensch.SetAktivitaet($F('aktivitaet'));">OK</button>

</body>

</html>
oop.js:
Code:
// Initialisieren
function init()
{
	var meinMensch = new Mensch("Tanja", "w");
	meinMensch.SetAktivitaet("Latschen")
	CheckAktivitaet(meinMensch, "aktivitaet");
		
	window.setTimeout("DivInhaltAendern('status', 'Objekt Mensch erzeugt.')", 2000);
	
	
}

// Hilfsfunktionen
function DivInhaltAendern(div, neuerInhalt)
{
	$(div).innerHTML = neuerInhalt;
}


// Klasse "Mensch"
function Mensch(name, geschlecht)
{
	// Eigenschaften
	this.Name;
	this.Geschlecht;
	this.Aktivitaet;

	// Methoden
	this.SetAktivitaet = function(neueAktivitaet)
	{
		this.Aktivitaet = neueAktivitaet;
	}
	
	// Konstruktor
	this.Name = name;
	if (geschlecht == "w")
		this.Geschlecht = "männlich";
	else
		this.Geschlecht = "weiblich";
	this.Aktivitaet;
}


// Loop-Klasse
function CheckAktivitaet(mensch, divId)
{
	// Eigenschaften
	var stop = false;
	var mal = 1;
	
	// Loop-Funktion zum Aktualisieren des Aktivitäts Status
	this.loop = function(intervall)
	{
		DivInhaltAendern(divId, mensch.Aktivitaet);

		if (stop == false)
		{
			window.setTimeout("this.loop(" + intervall + ");", intervall);
		}
		else
			$(divId).innerHTML = "Überprüfung gestoppt.";
	}

	// Stoppt das Checken auf Aktivitäten
	this.Stop = function()
	{
		stop = true;
	}
	
	// Konstruktor
	this.loop(1000);
}
es wird wie gesagt die library prototype verwendet (z. b. die formular-abfragefunktion $F("aktivitaet") ).

er soll dabei die funktion aufrufen, die die Aktivität von der Instanz einer "Mensch"-Klasse (var meinMensch) verändert (Über die Methode SetAktivitaet(), dabei wird der Wert des Formulars "aktivitaet" mit prototype übergeben, also meinMensch.SetAktivitaet($F('aktivitaet ')) --> $F('aktivitaet') ist der text, der im formular steht, für alle die prototype nicht kennen).

in der javascript-konsole von firefox wird folgendes ausgegeben:
Code:
Fehler: meinMensch is not defined
Quelldatei: file:///E:/Programmierung/JavaScript/Versuche/OOP/test.htm
Zeile: 1
es funktioniert nicht (der wert wird nicht geändert). woran liegt das?
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 10.11.2006, 18:07
Benutzerbild von Yhi
Yhi Yhi ist offline
/* no comment */
XHTMLforum-Mitglied
 
Registriert seit: 28.05.2006
Beiträge: 208
Yhi befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

Klassen werden in JS (mit prototype) anders definiert, nicht so wie bei dir als funktion.

So in etwa könnte das aussehen:
Code:
var Mensch = Class.create();
Mensch.prototype = {
	initialize: function(name, geschlecht)
	{
           this.mensch = name;
           this.geschlecht = geschlecht
	},
	CheckAktivitaet: function() 
	{
          // code
	},
	SetAktivitaet: function() 
	{
          // code
	}
}
__________________
PHP und Webdesign Blog
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 10.11.2006, 19:08
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 10.11.2006
Beiträge: 32
DoktorW befindet sich auf einem aufstrebenden Ast
Standard

an der klasse liegt es nicht, die klasse selber funktioniert ja, nur der aufruf über den button nicht.

hat jemand ne idee?
Mit Zitat antworten
  #4 (permalink)  
Alt 11.11.2006, 10:53
Benutzerbild von duessu
{blubb /}
XHTMLforum-Mitglied
 
Registriert seit: 05.09.2005
Beiträge: 371
duessu befindet sich auf einem aufstrebenden Ast
Standard

Du hast Probleme mit den Namensräumen.
Bei deiner Init Funktion erzeugst du ein Objekt (was richtig ist), jedoch ist dieses nur zur Laufzeit der Funktion vorhanden. Deswegen kannst du nicht auf meinePerson zugreifen über den Button!

Als Lösung gibt es zwei Varianten.
Du legst eine variabel meinePerson im globalen Namensraum an (auserhalb jeder funktion) dann Kannst du mit einer Init Funktion diese Varibale abfüllen und auch mit dem Button darauf zugreiffen.

Oder die 2te Variante ist nur mit einem Objekt zu arbeiten und dieses nicht erzeugen. (Code sagt mehr.. )
Code:
var meinePerson = {
  Groesse: "184cm",
  SetAktivitaet:function(){
    //Code
  },

  CheckAktivitaet:function(){
    //Code
  }
}
Vorteil an dieser Variante ist, du hasst immer einen Eindeutigen Namen um wieder zurück zu deinem Objekt zu kommen. Und du brauchts kein Framework, das läuft alles mit "normalen" Javascript...
Mit Zitat antworten
  #5 (permalink)  
Alt 11.11.2006, 20:27
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 10.11.2006
Beiträge: 32
DoktorW befindet sich auf einem aufstrebenden Ast
Standard

danke duessu, darauf wäre ich warscheinlich nie gekommen! ich habe schon alles mögliche probiert.

das scheint wirklich ein gutes board zu sein, ich glaube ich halte mich hier länger auf

also der thread wäre dann erledigt.
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Impressumsaufruf mit Javascript Sinclair Javascript & Ajax 6 19.05.2008 15:41
Problem: IE versteckt Text & Feedback Herbi CSS 2 11.08.2006 14:39
Javascript Problem - onclick return Spyker Javascript & Ajax 4 11.07.2006 11:54
Problem mit background-image / javascript im IE danliker CSS 3 17.05.2005 21:50
Problem mit Background-Color im FireFox to.ni CSS 2 31.08.2004 11:13


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:54 Uhr.