Bitte um Syntaxerläuterung für ein Skript (Array oder Funktion?)
Alexander Luck
- javascript
2 molily
Hallo,
ich habe mir grad eine JS-Datei (http://www.foopad.com/javascripts/behaviour.js) angeschaut und komme syntaktisch nicht so zurecht damit:
var Behaviour = {
list : new Array,
register : function(sheet){
Behaviour.list.push(sheet);
},
...
}
Die Variable Behaviour, ist es nun ein Array oder eine Klasse?? Also ich würde, wenn ich mir das weitere Script anschaue, sagen, es ist eine Klasse, aber die Deklaration sieht eher wie eine Array-Definition aus. Also "register" der Index und der Text hinter dem Doppelpunkt der Zeileninhalt. Aber passt auch irgendwie nicht so recht.
Vielleicht kann mir ja auch jemand ein dt. Seite schreiben, wo solche Dinge näher erläutert sind.
Danke vorab
Alexander
Hallo,
var Behaviour = {
list : new Array,
register : function(sheet){
Behaviour.list.push(sheet);
},...
}
Die Variable Behaviour, ist es nun ein Array oder eine Klasse??
Weder noch. Es ist ein Object-Objekt. Object ist der Konstruktor für alle möglichen Objekte, man damit auch ein "abstraktes" Objekt erschaffen. Dies hat hier nur den Zweck, ein paar andere Eigenschaften und Funktionen als Eigenschaften zu beinhalten.
Es ist keine "Klasse" (bzw. kein Prototyp, weil es in JavaScript keine Klassen gibt).
{ eigenschaft1 : wert1, eigenschaft2 : wert 2, ... } ist ein Object-Literal und erzeugt ein allgemeines Objekt.
Diese Literal-Kurzschreibweise ist äquivalent zu:
var Behaviour = new Object();
Behaviour.list = new Array();
Behaviour.register = function (...) { ... };
Damit hat man also ein abstraktes Objekt, das nur als Container für andere Objekte dient. In diesem Fall hat es zwei Eigenschaften, einen Array und eine Funktion.
Das Vorteil dieser Organisation ist, dass man alle zusammengehörigen Eigenschaften bzw. Funktionen an einem Objekt kleben hat, anstatt dass sie einfach im globalen Geltungsbereich gespeichert werden.
Man hätte auch schreiben können:
var list = new Array();
function register (sheet){
list.push(sheet);
}
usw.
Vielleicht kann mir ja auch jemand ein dt. Seite schreiben, wo solche Dinge näher erläutert sind.
Ich habe meine Bookmarks gerade nicht hier. http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Literals#Object_Literals ist auf Englisch.
http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/jscript7/html/jsconObjectData.asp zielt zwar auf JScript(.NET), aber das gilt auch für JavaScript.
Zum Object-Konstruktor: http://www.html-world.de/program/js_o_obj.php
Mathias