HighDots Forums  

Objektorientierte Programmierung

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss Objektorientierte Programmierung in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Manfred Zerndl
 
Posts: n/a

Default Objektorientierte Programmierung - 02-03-2005 , 06:27 AM








Was ist der Unterschied zwischen folgenden Varianten:

------------------------ (Variante 1) ---------------
function ClassA(name){
this.name = name;

this.getName = _getLayer;
this.setName = _setName;

function _getName(){
return name;
}
function _setName(name){
this.name = name;
}
}

--------- oder: ------ (Variante 2) --------------
function ClassA(name){
this.name = name;
}

ClassA.prototype.getName = function () {
return name;
}

ClassA.prototype.setName = function (name) {
this.name = name;
}

--------- oder: -------- (Variante 3) --------------
function ClassA(name){
this.name = name;

ClassA.prototype.getName = function () {
return name;
}

ClassA.prototype.setName = function (name) {
this.name = name;
}
}


Oder muss ich das irgendwie anders definieren?
Was ist der Vorteil der einzelnen Varianten?
Sollte man eine bestimmte Varianten bevorzugen/vermeiden? Wenn ja, warum?
Variante 2 funktionier bei mir nicht, obwohl sie in vielen Büchern
angegeben wird.

Vielen Dank

Manfred Zerndl


Reply With Quote
  #2  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Objektorientierte Programmierung - 02-03-2005 , 10:11 AM






Manfred Zerndl wrote:

Quote:
Was ist der Unterschied zwischen folgenden Varianten:

------------------------ (Variante 1) ---------------
[...]
Hier werden innerhalb der Funktion/globalen Methode `ClassA' weitere
Funktionen definiert. Nach ECMAScript 3, d.h. hier z.B. mit Microsoft
JScript, kann auf diese Funktionen nur innerhalb von `ClassA'
zugegriffen werden. (Netscape) JavaScript erweitert ECMAScript
dahingehend, dass auf innere Funktionen mittels `ClassA.bezeichner'
zugegriffen werden kann, diese also Eigenschaften des Variablenobjekts
werden.

Wird ClassA mit Schlüsselwort `new' als Konstruktor benutzt, so
erhalten damit erzeugte (ClassA-)Objekte die Function-Eigenschaften,
d.h. Methoden, `getName' und `setName', sowie die Eigenschaft `name'
mit dem Konstruktorargument als Wert.

Quote:
--------- oder: ------ (Variante 2) --------------
[...]
Hier erhalten neue ClassA-Objekte die Eigenschaft `name' mit dem
Knnstruktorargument als Wert. Ausserdem haben nicht nur ClassA-Objekte
die Methoden `getName' und `setName', sondern auch Objekte, die mit
Konstruktoren erzeugt wurden, deren Prototyp von ClassA abgeleitet ist:

function Foo(x)
{
this.blubb = x;
}

Foo.prototype.foo = function()
{
}

function Bar(y)
{
Foo.call(this, y);
// ...
}

Bar.prototype = new Foo();

var
f = new Foo(23),
b = new Bar(42);

alert([f.foo, f.blubb, b.foo, b.blubb]);

Quote:
--------- oder: -------- (Variante 3) --------------
[...]
Wie oben, allerdings werden die Prototyp-Methoden bei jedem
Konstruktoraufruf wiederhergestellt/überschrieben.

Quote:
Oder muss ich das irgendwie anders definieren?
Du *musst* gar nichts. Es gibt verschiedene Möglichkeiten.

Allerdings gibt es in ECMAScript-Implementationen vor Edition 4
keine Klassen, diese Sprachen verwenden prototypbasierte Vererbung.
Insofern ist der Bezeichner `ClassA' irreführend.

Übrigens existiert <http://dcljs.de/links.php>, siehe FAQ-Pointer.

Quote:
Was ist der Vorteil der einzelnen Varianten?
Siehe oben.

Quote:
Sollte man eine bestimmte Varianten bevorzugen/vermeiden? Wenn ja,
warum?
Das kannst nur Du wissen, siehe oben.

Quote:
Variante 2 funktionier bei mir nicht, obwohl sie in vielen
Büchern angegeben wird.
<http://glasgoogle.de/>


HTH

PointedEars


Reply With Quote
  #3  
Old   
Martin Honnen
 
Posts: n/a

Default Re: Objektorientierte Programmierung - 02-03-2005 , 10:21 AM





Manfred Zerndl wrote:


Quote:
--------- oder: ------ (Variante 2) --------------
function ClassA(name){
this.name = name;
}

ClassA.prototype.getName = function () {
return name;
Nimm
return this.name;
dann funktioniert diese Variante.



--

Martin Honnen
http://JavaScript.FAQTs.com/


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.