Objektliterale und Objekte
Lukas
- javascript
Hi!
Gehe ich recht in der Annahme, dass es nicht möglich ist mit Objektliteralen zu arbeiten, und diese dann als Objekte verwenden (auch wenn ich mir das irgendwie nicht vorstellen kann)?
Ich habe weder auf SELFHTML noch sonstwo im Web ein Beispiel gefunden, wo genau dies gezeigt wird. Und bei meinem Versuch gab es eine Fehlermeldung.
danke && ciao
Hi!
Du postest eindeutig zuwenig von deinem Code ;)
»»Und bei meinem Versuch gab es eine Fehlermeldung.
Welche?
off:pp
Hi!
Du postest eindeutig zuwenig von deinem Code ;)
:-)
<html>
<head>
<title></title>
<script type="text/javascript">
var foo =
{
bar : function(text)
{
window.alert(text);
}
}
var foobar = new foo();
</script>
</head>
<body>
<a href="#" onclick="foobar.bar('slide_me');">Teste!!!</a>
</body>
</html>
Und bei meinem Versuch gab es eine Fehlermeldung.
Welche?
Firebug meldet "Foo is not a constructor" und infolge dessen natürlich "foobar has no properties".
Danke
Hi!
var foo =
{
bar : function(text)
{
window.alert(text);
}
}
Damit hast Du bereits ein Objekt instantiiert und nicht etwa eine 'Klasse' definert.
Du kannst also mit:
foo.bar('slide_me');
auf deine oben definierte Methode zugfreifen.
off:pp
Hi!
Damit hast Du bereits ein Objekt instantiiert und nicht etwa eine 'Klasse' definert.
Aah, ok. Das war mir nicht klar.
Du kannst also mit:
foo.bar('slide_me');
auf deine oben definierte Methode zugfreifen.
Und was mache ich, wenn ich mehrere Objekte haben will? Also wie mit
obj1 = new foo();
obj2 = new foo();
Danke!
Hallo,
Und was mache ich, wenn ich mehrere Objekte haben will?
Dann arbeitest du mit Konstruktorfunktionen.
function K () {
// Zugriff auf die neue Instanz über this
}
var i1 = new K;
var i2 = new K;
...
http://de.selfhtml.org/javascript/sprache/objekte.htm#eigene
http://de.wikipedia.org/wiki/JavaScript#Eigene_Objekte_definieren
Mathias
Hi!
Und was mache ich, wenn ich mehrere Objekte haben will? Also wie mit
obj1 = new foo();
obj2 = new foo();
siehe Antwort von [molily](https://forum.selfhtml.org/?t=171027&m=1119065)
off:pp
Hallo,
var foo =
{
bar : function(text)
{
window.alert(text);
}
}
var foobar = new foo();
Da verwechselst du zwei Sachen.
»new« bildet Instanzen, indem es Funktionen aufruft. Man kann new funktionsobjekt schreiben, sonst nichts. Nur Funktionen können neue Instanzen konstruieren:
function Konstruktor () {}
var instanz = new Konstuktor();
Objektliterale haben damit erstmal nichts zu tun. Sie sind eine Schreibweise, um Objekte vom allgemeinsten Typ Object zu notieren. Ein so notiertes Objekt kannst du zwar durch Kopieren aller Eigenschaften vervielfältigen, aber nicht mit new instantiieren.
Aber in deinem Beispiel musst du doch weder das Objekt vervielfältigen, noch eine Instanz bilden, sondern kannst direkt foo.bar aufrufen. Der Sinn von solchen Object-Objekten ist einfach, dass sie zusammengehörige Werte als Container gruppieren. Das hat mit Objektorientierter Programmierung wenig zu tun, das ist eher eine Art Namespace, weil es in JavaScript keine richtigen Namespaces gibt.
Mathias
Perfekt! Jetzt weiss ich auch wofür genau man Object-Literale braucht.
Vielen Dank an Peter Pan, molily und Struppi!!!
var foo =
{
bar : function(text)
{
window.alert(text);
}
}
var foobar = new foo();
Firebug meldet "Foo is not a constructor" ...
Das ist doch klar. Um ein Objekt mit new() zu erzeugen brauchst du eine Funktion aber foo ist nur ein Objekt, du kannst aber auf foo.bar(text) zugreifen.
Struppi.