ObjektOrientierung - Methoden mit Weiteren Methonden verfügbar machen.

NetBull

Erfahrenes Mitglied
Hi,

noch so ein Konstrukt wo ich gerade nicht weiter komme.
Ich möchte eine Tabelle dynamisch erzeugen wo ich mit
tableObj.Cells(1,3).Value an den Wert komme.

Problem: Ich kann die Funktionen von Aussen nicht ansprechen!

BeispielCode:
Code:
function tblCleanSelection()
{
	mControl = document.getElementById("jsBackLogCleanUpControl");
	var mTable = document.createElement("table");		
	mTable.style.border = "solid 1px red";		
	mControl.appendChild(mTable);
	
	this.loadHeader = function(aCaptions)
	{
		var mRow = document.createElement("tr");
		for(i=0; i<aCaptions.length; i++)
		{
			var mCell = document.createElement("th");
			mCell.innerHTML = aCaptions[i];
			mRow.appendChild(mCell);
		}
		mTable.appendChild(mRow);
	}
	
	this.loadTable = function(aTableData)
	{
		for(i=0; i<aTableData.length; i++)
		{
			var mRow = document.createElement("tr");
			
			for(ii=0; ii<aTableData.length; ii++)
			{
				var mCell = document.createElement("td");
				mCell.innerHTML = aTableData[i][ii];
				mCell.setAttribute("row", i+1);
				mCell.setAttribute("col", ii+1);
				mRow.appendChild(mCell);
			}
			
			mTable.appendChild(mRow);
		}
	}
	
	this.Cells = function(aRow, aCol)
	{
		this.Value = function()
		{
			return "test";
		}
	}
	
	this.loadSumary = function(aCols, aCaption)
	{
		var mRow = document.createElement("tr");
		var mCell = document.createElement("th");
		mCell.colSpan  = aCols;
		mCell.innerHTML = aCaption;			
		mRow.appendChild(mCell);
		mTable.appendChild(mRow);
	}
}

Aufruf der Cells(x,y).Value mit
Code:
alert(mTblCleanSelection.Cells(1,1).Value);

Und das hier sollte eigentlich was zurückgeben:
Code:
this.Cells = function(aRow, aCol)
{
	this.Value = function()
	{
		return "test";
	}
}

Erschien mir logisch, ist aber anscheinend anders logisch :)

Wie geht es richtig und wo ist mein Denkfehler. Finde leider nix im Web, oder suche falsch.

cu s00n
deAndro
 
Ich würde in so einem Fall immer mit Prototypen arbeiten:
Code:
tblCleanSelection = function () {};
tblCleanSelection.prototype = {};
tblCleanSelection.prototype.Cells = function (aRow, aCol) {
  this.value = aRow + aCol;
  return this;
}
tblCleanSelection.prototype.Value = function () {
  return this.value;
}

a = new tblCleanSelection;
a.Cells(1, 2).Value;
 
was genau bewirkt prototype. Hab das schon oft gelesen, kann aber nicht wirklich nachvollziehen was es bewirkt.
 
Das Prototype-Modell stellt beispielsweise in Javascript die Möglichkeit für Vererbung dar. Du speicherst in der Prototype-Eigenschaft einfach eine Instanz einer anderen Klasse und somit hat das neue Objekt alle Eigenschaften und Methoden des Prototype-Objektes.

In meinem Beispiel ist das Prototype-Objekt ein leeres Objekt, dessen Eigenschaften und Methoden ich im Nachhinein definiere.
 
OK so auf den Punkt gebracht ist es verständlich. Die Bücher die ich habe erklären es nicht wirklich.
Ein weiteres großes Problem ist die Entwicklungsumgebung. Ich suche schon seit längerem nach einem richtigen Intellisense. Derzeit entwickel ich mein PHP in eclipse und JavaScript in Dreamweaver und eclipse. Aber beides ist nicht die tolle Lösung. Gibt es bessere, wo Intellisense wirklich und auch mit eigenen Funktionen und Objekten funktioniert?
 

Neue Beiträge

Zurück