whirlwind: Objekte und mehrere Konstruktoren?

Objekte und mehrere Konstruktoren?

Wer kann mir verraten, warum es sich bei JavaScript so merkwürdig mit den Konstruktoren verhält?

Bei folgendem Beispiel wird immer der Konstruktor mit den zwei Parametern angsprungen?!

Normalerweise müsste doch der mit der richtigen Parametersignatur verwenden werden - so verhält es sich zumindest bei Java und C++.

Es verhält sich anscheunend so, dass immer der Konsrruktor mit den meisten Parametern benutzt wird! Das finde ich sehr unschön...

Muss man hier etwa einen workaround programmieren?

Beispiel:
---------------
Datei auto.js
---------------

/*
  *  multiple constructors
 */

function Auto() {

this.ps = 0;
  this.speed = 0;
  document.write("Konstruktor ist parameterlos!<br />");
 }

function Auto(ps) {
     this.ps = ps;
     document.write("PS gesetzt!<br />");
 }

function Auto(ps, speed) {
     this.ps = ps;
     this.speed = speed;
     document.write("PS und Speed gesetzt!<br />");
 }

--------------------
Datei autos.html
--------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
 <title>Javascript OOP: Multiple Constructors</title>
</head>
<body>
  <script type="text/javascript" src="auto.js"></script>

<script type="text/javascript">
   <!--

document.write("<h2>Javascript OOP: Multiple Constructors</h2>");

var auto1;
   auto1 = new Auto();

var auto2 = new Auto(120);

document.write("Auto#2 hat " + auto2.ps +" PS.<br />");

//-->
  </script>
</body>
</html>

  1. Hi,

    Bei folgendem Beispiel wird immer der Konstruktor mit den zwei Parametern angsprungen?!

    naja natürlich. Die anderen beiden gleichnamigen Funktionen hast Du ja auch überschrieben.

    Normalerweise müsste doch der mit der richtigen Parametersignatur verwenden werden - so verhält es sich zumindest bei Java und C++.

    Und? JavaScript hat exakt gar nichts mit Java oder C++ zu tun.

    Es verhält sich anscheunend so, dass immer der Konsrruktor mit den meisten Parametern benutzt wird! Das finde ich sehr unschön...

    Dann drehe die Reihenfolge um, wenn's Dir lieber ist, dass die Funktion ohne Parameter verwendet wird. Oder schreibe einfach eine Funktion, die mit unterschiedlichen Mengen von Parametern rechnet.

    Muss man hier etwa einen workaround programmieren?

    Nein, man muss einfach JavaScript programmieren. Nicht Java, und nicht C++.

    <script type="text/javascript">
       <!--

    document.write("<h2>Javascript OOP: Multiple Constructors</

    An genau dieser Stelle endet übrigens Dein <script>-Bereich durch die beiden letzten Zeichen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Alles klar. Vielen Dank für die Antwort!
      whirlwind

      Hi,

      Bei folgendem Beispiel wird immer der Konstruktor mit den zwei Parametern angsprungen?!

      naja natürlich. Die anderen beiden gleichnamigen Funktionen hast Du ja auch überschrieben.

      Normalerweise müsste doch der mit der richtigen Parametersignatur verwenden werden - so verhält es sich zumindest bei Java und C++.

      Und? JavaScript hat exakt gar nichts mit Java oder C++ zu tun.

      Es verhält sich anscheunend so, dass immer der Konsrruktor mit den meisten Parametern benutzt wird! Das finde ich sehr unschön...

      Dann drehe die Reihenfolge um, wenn's Dir lieber ist, dass die Funktion ohne Parameter verwendet wird. Oder schreibe einfach eine Funktion, die mit unterschiedlichen Mengen von Parametern rechnet.

      Muss man hier etwa einen workaround programmieren?

      Nein, man muss einfach JavaScript programmieren. Nicht Java, und nicht C++.

      <script type="text/javascript">
         <!--

      document.write("<h2>Javascript OOP: Multiple Constructors</

      An genau dieser Stelle endet übrigens Dein <script>-Bereich durch die beiden letzten Zeichen.

      Cheatah

  2. Objekte und mehrere Konstruktoren?

    In JS gibt es nicht mehrere Konstruktoren.

    Normalerweise müsste doch der mit der richtigen Parametersignatur verwenden werden - so verhält es sich zumindest bei Java und C++.

    es gibt keine Parametersignatur in JS.

    Es verhält sich anscheunend so, dass immer der Konsrruktor mit den meisten Parametern benutzt wird! Das finde ich sehr unschön...

    Nein, es wird dir Funktion angesprungen, die als letzte geparst wurde, alle anderen wurden überschrieben und existieren nicht mehr.

    Muss man hier etwa einen workaround programmieren?

    Auch nicht, du schreibst einen Konstruktor, der von dir gewünschten Anzahl zu recht kommt.

    function Auto(ps, speed) {
         this.ps = ps || 0;
         this.speed = speed || 0;
     }

    Mit document.write überschreibst du übrigens das Dokument inkl. dem JS.

    Struppi.

    1. Alles klar. Vielen Dank für die Antwort!
      whirlwind

      Objekte und mehrere Konstruktoren?

      In JS gibt es nicht mehrere Konstruktoren.

      Normalerweise müsste doch der mit der richtigen Parametersignatur verwenden werden - so verhält es sich zumindest bei Java und C++.

      es gibt keine Parametersignatur in JS.

      Es verhält sich anscheunend so, dass immer der Konsrruktor mit den meisten Parametern benutzt wird! Das finde ich sehr unschön...

      Nein, es wird dir Funktion angesprungen, die als letzte geparst wurde, alle anderen wurden überschrieben und existieren nicht mehr.

      Muss man hier etwa einen workaround programmieren?

      Auch nicht, du schreibst einen Konstruktor, der von dir gewünschten Anzahl zu recht kommt.

      function Auto(ps, speed) {
           this.ps = ps || 0;
           this.speed = speed || 0;
      }

      Mit document.write überschreibst du übrigens das Dokument inkl. dem JS.

      Struppi.