<?xml version="1.0" encoding="utf-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Kommentare zu: OOP in Javascript &#8211; Teil 1</title>
	<atom:link href="http://javascript.jstruebig.de/javascript/792/feed" rel="self" type="application/rss+xml" />
	<link>http://javascript.jstruebig.de/javascript/792</link>
	<description>Javascript-Blog mit Skripten, Beispielen, Lösungen und FAQ</description>
	<lastBuildDate>Thu, 02 Feb 2012 11:31:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Von: EaselJS: Lift-off und OOP &#124; crusy.net</title>
		<link>http://javascript.jstruebig.de/javascript/792/comment-page-1#comment-20747</link>
		<dc:creator>EaselJS: Lift-off und OOP &#124; crusy.net</dc:creator>
		<pubDate>Sat, 07 Jan 2012 12:59:14 +0000</pubDate>
		<guid isPermaLink="false">http://javascript.jstruebig.de/?p=792#comment-20747</guid>
		<description>[...] objektorientiertes Programmieren in JS? Meine JS-Kenntnisse sind etwas eingerostet, aber hier gibt es eine nette Basic- (!) [...]</description>
		<content:encoded><![CDATA[<p>[...] objektorientiertes Programmieren in JS? Meine JS-Kenntnisse sind etwas eingerostet, aber hier gibt es eine nette Basic- (!) [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Struppi</title>
		<link>http://javascript.jstruebig.de/javascript/792/comment-page-1#comment-20678</link>
		<dc:creator>Struppi</dc:creator>
		<pubDate>Wed, 07 Sep 2011 06:29:44 +0000</pubDate>
		<guid isPermaLink="false">http://javascript.jstruebig.de/?p=792#comment-20678</guid>
		<description>Jein, die Zuweisung der prototype Eigenschaften hat einen unerwünschten Nebeneffekt. Den ich auch im obigen Artikel unter der Überschrift &quot;der falsche Weg&quot; beschrieben habe.

Der bessere Weg, eine Vererbung mit JS umzusetzen, ist eigentlich Thema von Teil 2 dieses Artikels - aber wer weiß wann ich den fertig kriege. Letztlich läuft es aber immer auf den von Crockford beschriebenen Weg über eine solche Fabrikfunktion hin:

&lt;pre&gt;function object(base) {
   function Proto() {}
   Proto.prototype = base;
   return new Proto();
}&lt;/pre&gt;

Genaueres hier http://javascript.crockford.com/prototypal.html

Du sagst zwar selbst es ist eine Geschmacksfrage. Aber bei deinem Vorschlag hast du das Problem, dass die Fehlermeldung nicht auf die Stelle wo der Fehler entstanden ist zeigt, sondern dorthin wo du das throw machst. Du erschwerst also das debuggen.</description>
		<content:encoded><![CDATA[<p>Jein, die Zuweisung der prototype Eigenschaften hat einen unerwünschten Nebeneffekt. Den ich auch im obigen Artikel unter der Überschrift "der falsche Weg" beschrieben habe.</p>
<p>Der bessere Weg, eine Vererbung mit JS umzusetzen, ist eigentlich Thema von Teil 2 dieses Artikels - aber wer weiß wann ich den fertig kriege. Letztlich läuft es aber immer auf den von Crockford beschriebenen Weg über eine solche Fabrikfunktion hin:</p>
<pre>function object(base) {
   function Proto() {}
   Proto.prototype = base;
   return new Proto();
}</pre>
<p>Genaueres hier <a href="http://javascript.crockford.com/prototypal.html" rel="nofollow">http://javascript.crockford.com/prototypal.html</a></p>
<p>Du sagst zwar selbst es ist eine Geschmacksfrage. Aber bei deinem Vorschlag hast du das Problem, dass die Fehlermeldung nicht auf die Stelle wo der Fehler entstanden ist zeigt, sondern dorthin wo du das throw machst. Du erschwerst also das debuggen.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: paul</title>
		<link>http://javascript.jstruebig.de/javascript/792/comment-page-1#comment-20677</link>
		<dc:creator>paul</dc:creator>
		<pubDate>Tue, 06 Sep 2011 16:29:17 +0000</pubDate>
		<guid isPermaLink="false">http://javascript.jstruebig.de/?p=792#comment-20677</guid>
		<description>Ah ok, wenn ich Dich richtig verstehe lass ich den Konstruktoraufruf einfach weg und dann kann ich in meinem erbenden Objekt eigene Werte zuweisen. Also &quot;B.prototype = A.prototype&quot; statt &quot;B.prototype = new A()&quot;. Das werde ich mal testen.

Ja klar hast du recht mit der Typisierung. Im Endergebnis tut sich da nichts da man den Fehler erst zur Laufzeit bemerkt. Allerdings dann mit einer besseren bzw. eigenen Fehlerbeschreibung.
Der Hauptgrund ist jedoch das ich in meinen Kommentaren immer auf das &quot;Interface&quot; verweisen kann. So muss ich nicht immer die Kommentare anpassen wenn sich eine gemeinsame Schnittstelle ändert oder es eine neue Implementierung gibt. Andernfalls müsste man in den Kommentaren jede gültige Implementierung listen oder eine Anleitung schreiben welche Funktionen das erwartende Objekt können muss. Außerdem kann ich über die String suche feststellen wer alles von meinem &quot;Interface&quot; erbt und somit die fehlenden Funktionen ergänzen.
Der Entwickler wird durch das &quot;Interface&quot; leider nicht gezwungen dessen Funktionen zu implementieren es bringt aber, in großen Projekten, eine Menge Übersicht und senkt die Fehleranfälligkeit.

Für mich ist es viel mehr eine praktische als eine geschmackliche Frage. 

Gruß
Paul</description>
		<content:encoded><![CDATA[<p>Ah ok, wenn ich Dich richtig verstehe lass ich den Konstruktoraufruf einfach weg und dann kann ich in meinem erbenden Objekt eigene Werte zuweisen. Also "B.prototype = A.prototype" statt "B.prototype = new A()". Das werde ich mal testen.</p>
<p>Ja klar hast du recht mit der Typisierung. Im Endergebnis tut sich da nichts da man den Fehler erst zur Laufzeit bemerkt. Allerdings dann mit einer besseren bzw. eigenen Fehlerbeschreibung.<br />
Der Hauptgrund ist jedoch das ich in meinen Kommentaren immer auf das "Interface" verweisen kann. So muss ich nicht immer die Kommentare anpassen wenn sich eine gemeinsame Schnittstelle ändert oder es eine neue Implementierung gibt. Andernfalls müsste man in den Kommentaren jede gültige Implementierung listen oder eine Anleitung schreiben welche Funktionen das erwartende Objekt können muss. Außerdem kann ich über die String suche feststellen wer alles von meinem "Interface" erbt und somit die fehlenden Funktionen ergänzen.<br />
Der Entwickler wird durch das "Interface" leider nicht gezwungen dessen Funktionen zu implementieren es bringt aber, in großen Projekten, eine Menge Übersicht und senkt die Fehleranfälligkeit.</p>
<p>Für mich ist es viel mehr eine praktische als eine geschmackliche Frage. </p>
<p>Gruß<br />
Paul</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Struppi</title>
		<link>http://javascript.jstruebig.de/javascript/792/comment-page-1#comment-20676</link>
		<dc:creator>Struppi</dc:creator>
		<pubDate>Tue, 06 Sep 2011 11:56:08 +0000</pubDate>
		<guid isPermaLink="false">http://javascript.jstruebig.de/?p=792#comment-20676</guid>
		<description>&lt;cite&gt;Was sagt mir dieser Artikel außer das Vererbung Scheiße ist weil ich keine gemeinsamen Attribute nutzen kann, was ja der Sinn an Vererbung ist. Funktionen die somit auch gemeinsame Attribute NICHT nutzen können kann ich auch auslagern.&lt;/cite&gt;

Nein, darum geht es in dem Artikel nicht. Ich schildere darin, dass der klassische Weg der Vererbung über prototype = new Base() schlecht ist, weil du den Konstruktor von Base() an einer Stelle aufrufst wo er nicht hingehört. 

Darüber hinaus zeigt er noch den Mechanismus durch das zuweisen von zwei prototypen. Was z.b. auch Jquery.plugin nutzt.

Ob man Interfaces mit JS simulieren möchte, ist Geschmacksache, da JS im Gegensatz zu Java keine Typisierte Sprache ist, ist der Nutzen nur gering. Denn ob jetzt deine Implementierung einen Fehler wirft oder JS an sich, dürfte im Endeffekt egal sein.</description>
		<content:encoded><![CDATA[<p><cite>Was sagt mir dieser Artikel außer das Vererbung Scheiße ist weil ich keine gemeinsamen Attribute nutzen kann, was ja der Sinn an Vererbung ist. Funktionen die somit auch gemeinsame Attribute NICHT nutzen können kann ich auch auslagern.</cite></p>
<p>Nein, darum geht es in dem Artikel nicht. Ich schildere darin, dass der klassische Weg der Vererbung über prototype = new Base() schlecht ist, weil du den Konstruktor von Base() an einer Stelle aufrufst wo er nicht hingehört. </p>
<p>Darüber hinaus zeigt er noch den Mechanismus durch das zuweisen von zwei prototypen. Was z.b. auch Jquery.plugin nutzt.</p>
<p>Ob man Interfaces mit JS simulieren möchte, ist Geschmacksache, da JS im Gegensatz zu Java keine Typisierte Sprache ist, ist der Nutzen nur gering. Denn ob jetzt deine Implementierung einen Fehler wirft oder JS an sich, dürfte im Endeffekt egal sein.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: paul</title>
		<link>http://javascript.jstruebig.de/javascript/792/comment-page-1#comment-20675</link>
		<dc:creator>paul</dc:creator>
		<pubDate>Tue, 06 Sep 2011 11:41:55 +0000</pubDate>
		<guid isPermaLink="false">http://javascript.jstruebig.de/?p=792#comment-20675</guid>
		<description>Was sagt mir dieser Artikel außer das Vererbung Scheiße ist weil ich keine gemeinsamen Attribute nutzen kann, was ja der Sinn an Vererbung ist. Funktionen die somit auch gemeinsame Attribute NICHT nutzen können kann ich auch auslagern.

Ich nutze Vererbung meist nur um Interfaces zu simulieren indem die Funktionen des Interfaces nur Fehler werfen und man somit gezwungen ist diese in der erbenden Klasse zu implementieren:

&lt;pre&gt;function A_Interface() {
  this.helloWorld = function() {
    throw &quot;Missing overwrite method in implementation for A_Interface.helloWorld().&quot;
  }
}

B_Implentierung.prototype = new A_Interface();
B_Implentierung.prototype.constructor = B_Implentierung;
function B_Implentierung() {
  this.helloWorld = function() {
    alert(&#039;Hello World&#039;);
  }
}&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<p>Was sagt mir dieser Artikel außer das Vererbung Scheiße ist weil ich keine gemeinsamen Attribute nutzen kann, was ja der Sinn an Vererbung ist. Funktionen die somit auch gemeinsame Attribute NICHT nutzen können kann ich auch auslagern.</p>
<p>Ich nutze Vererbung meist nur um Interfaces zu simulieren indem die Funktionen des Interfaces nur Fehler werfen und man somit gezwungen ist diese in der erbenden Klasse zu implementieren:</p>
<pre>function A_Interface() {
  this.helloWorld = function() {
    throw "Missing overwrite method in implementation for A_Interface.helloWorld()."
  }
}

B_Implentierung.prototype = new A_Interface();
B_Implentierung.prototype.constructor = B_Implentierung;
function B_Implentierung() {
  this.helloWorld = function() {
    alert('Hello World');
  }
}</pre>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Steffen Müller</title>
		<link>http://javascript.jstruebig.de/javascript/792/comment-page-1#comment-20497</link>
		<dc:creator>Steffen Müller</dc:creator>
		<pubDate>Fri, 18 Feb 2011 17:04:10 +0000</pubDate>
		<guid isPermaLink="false">http://javascript.jstruebig.de/?p=792#comment-20497</guid>
		<description>Hallo zusammen!

Ich habe vor ein paar Tagen einen Workshop zum Thema OOP in Javascript gemacht (naja, und noch ein paar andere Themen: Closures, Scopes, this, Performance...). Die optisch ganz ansprechende Prezi Präsentation steht jetzt online. Als weiterführendes &quot;Präsentierfutter&quot; also vielleicht ganz interessant:

http://www.incloud.de/blog/2011/02/programming-professional-javascript-while-staying-sane

Viele Grüße,
Steffen</description>
		<content:encoded><![CDATA[<p>Hallo zusammen!</p>
<p>Ich habe vor ein paar Tagen einen Workshop zum Thema OOP in Javascript gemacht (naja, und noch ein paar andere Themen: Closures, Scopes, this, Performance...). Die optisch ganz ansprechende Prezi Präsentation steht jetzt online. Als weiterführendes "Präsentierfutter" also vielleicht ganz interessant:</p>
<p><a href="http://www.incloud.de/blog/2011/02/programming-professional-javascript-while-staying-sane" rel="nofollow">http://www.incloud.de/blog/2011/02/programming-professional-javascript-while-staying-sane</a></p>
<p>Viele Grüße,<br />
Steffen</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Struppi</title>
		<link>http://javascript.jstruebig.de/javascript/792/comment-page-1#comment-20454</link>
		<dc:creator>Struppi</dc:creator>
		<pubDate>Mon, 03 Jan 2011 11:08:20 +0000</pubDate>
		<guid isPermaLink="false">http://javascript.jstruebig.de/?p=792#comment-20454</guid>
		<description>Ein Blogeintrag ist typischerweise immer wie ein Tagebucheintrag. Aber ich hatte auch am Anfang geschrieben, dass der Artikel noch zwei weitere Folgen haben wird. 

Das Problem ist, dass die prototypische Vererbung, die ich in dem Artikel auch kurz erkläre, die Paradigmen, die ich gerne umsetzen wollte, nur über Umwege möglich macht, die alle ihre Nachteile haben. Den Weg, den ich gefunden habe, bin ich momentan noch am erproben, ich bin aber kurz vor der Fertigstellung des zweiten Teils.

Interessant finde ich, dass die Zuweisungen der Prototypeigenschaften über kreuz funktioniert. Eine Eigenschaft, die ich bisher nirgends erklärt gefunden habe. Deshalb ist die in dem Artikel beschriebene &quot;Lösung&quot; gar nicht so uninteressant wie es scheint. Denn dieses Verhalten läßt sich nutzen, um Objekte zu synchronisieren. Durch die Erweiterung des Prototyps A, wird automatisch auch B erweitert.

Zudem habe ich eine Reihe von Artikel aufgelistet, die sehr ausführlich die Prototypische Vererbung erklären.</description>
		<content:encoded><![CDATA[<p>Ein Blogeintrag ist typischerweise immer wie ein Tagebucheintrag. Aber ich hatte auch am Anfang geschrieben, dass der Artikel noch zwei weitere Folgen haben wird. </p>
<p>Das Problem ist, dass die prototypische Vererbung, die ich in dem Artikel auch kurz erkläre, die Paradigmen, die ich gerne umsetzen wollte, nur über Umwege möglich macht, die alle ihre Nachteile haben. Den Weg, den ich gefunden habe, bin ich momentan noch am erproben, ich bin aber kurz vor der Fertigstellung des zweiten Teils.</p>
<p>Interessant finde ich, dass die Zuweisungen der Prototypeigenschaften über kreuz funktioniert. Eine Eigenschaft, die ich bisher nirgends erklärt gefunden habe. Deshalb ist die in dem Artikel beschriebene "Lösung" gar nicht so uninteressant wie es scheint. Denn dieses Verhalten läßt sich nutzen, um Objekte zu synchronisieren. Durch die Erweiterung des Prototyps A, wird automatisch auch B erweitert.</p>
<p>Zudem habe ich eine Reihe von Artikel aufgelistet, die sehr ausführlich die Prototypische Vererbung erklären.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Tim</title>
		<link>http://javascript.jstruebig.de/javascript/792/comment-page-1#comment-20453</link>
		<dc:creator>Tim</dc:creator>
		<pubDate>Sun, 02 Jan 2011 19:25:34 +0000</pubDate>
		<guid isPermaLink="false">http://javascript.jstruebig.de/?p=792#comment-20453</guid>
		<description>Vorsicht an alle die wissen wollen wie Vererbung in JS funktioniert, dieser Artikel ist eher ein Tagebucheintrag, er endet mit einem Beispiel wie es nicht geht, jedoch bietet keine Lösung! (Evt. kann der Author das auch am Anfang klarstellen).</description>
		<content:encoded><![CDATA[<p>Vorsicht an alle die wissen wollen wie Vererbung in JS funktioniert, dieser Artikel ist eher ein Tagebucheintrag, er endet mit einem Beispiel wie es nicht geht, jedoch bietet keine Lösung! (Evt. kann der Author das auch am Anfang klarstellen).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: QuHno</title>
		<link>http://javascript.jstruebig.de/javascript/792/comment-page-1#comment-20232</link>
		<dc:creator>QuHno</dc:creator>
		<pubDate>Mon, 13 Sep 2010 21:16:57 +0000</pubDate>
		<guid isPermaLink="false">http://javascript.jstruebig.de/?p=792#comment-20232</guid>
		<description>Yahoo ist auch immer wieder lesenswert:
&lt;a href=&quot;http://www.yuiblog.com/blog/2007/06/12/module-pattern/&quot; rel=&quot;nofollow&quot;&gt;A JavaScript Module Pattern&lt;/a&gt; - hilft den Namespace sauber zu halten :)</description>
		<content:encoded><![CDATA[<p>Yahoo ist auch immer wieder lesenswert:<br />
<a href="http://www.yuiblog.com/blog/2007/06/12/module-pattern/" rel="nofollow">A JavaScript Module Pattern</a> - hilft den Namespace sauber zu halten <img src='http://javascript.jstruebig.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Tweening &#8211; Effekte mit Javascript [Javascript ist Toll!]</title>
		<link>http://javascript.jstruebig.de/javascript/792/comment-page-1#comment-20192</link>
		<dc:creator>Tweening &#8211; Effekte mit Javascript [Javascript ist Toll!]</dc:creator>
		<pubDate>Fri, 03 Sep 2010 11:28:51 +0000</pubDate>
		<guid isPermaLink="false">http://javascript.jstruebig.de/?p=792#comment-20192</guid>
		<description>[...] warten einige Leser auf die Fortsetzung meiner Reihe OOP mit Javascript. Ich bin während der Recherche zum 2. Teil auf einige Aspekte gestossen, die mein ursprüngliches [...]</description>
		<content:encoded><![CDATA[<p>[...] warten einige Leser auf die Fortsetzung meiner Reihe OOP mit Javascript. Ich bin während der Recherche zum 2. Teil auf einige Aspekte gestossen, die mein ursprüngliches [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Struppi</title>
		<link>http://javascript.jstruebig.de/javascript/792/comment-page-1#comment-20133</link>
		<dc:creator>Struppi</dc:creator>
		<pubDate>Mon, 05 Jul 2010 11:17:20 +0000</pubDate>
		<guid isPermaLink="false">http://javascript.jstruebig.de/?p=792#comment-20133</guid>
		<description>Danke.

Lust schon, der Artikel ist auch schon im groben Entwurf fertig, aber das Thema ist so komplex, dass mir in vielen Dingen schwer fällt es zu formulieren.</description>
		<content:encoded><![CDATA[<p>Danke.</p>
<p>Lust schon, der Artikel ist auch schon im groben Entwurf fertig, aber das Thema ist so komplex, dass mir in vielen Dingen schwer fällt es zu formulieren.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: RedTuesday</title>
		<link>http://javascript.jstruebig.de/javascript/792/comment-page-1#comment-20130</link>
		<dc:creator>RedTuesday</dc:creator>
		<pubDate>Fri, 02 Jul 2010 11:16:34 +0000</pubDate>
		<guid isPermaLink="false">http://javascript.jstruebig.de/?p=792#comment-20130</guid>
		<description>Schöner Artikel. Freue mich schon auf die anderen beiden, sofern Du dafür Zeit und Lust findest. :)</description>
		<content:encoded><![CDATA[<p>Schöner Artikel. Freue mich schon auf die anderen beiden, sofern Du dafür Zeit und Lust findest. <img src='http://javascript.jstruebig.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
</channel>
</rss>

