wofür ist new ???
jan
- javascript
hallo zusammen,
ich habe nicht sonderlich viel ahnung von js , möchte aber scriptaculous nutzen.
Nun habe ich festgestellt, dass wenn ich einen Effekt mache, mittels
new Effect.Appear(meinDiv, { ...options... });
das gleiche ergebnis kommt wie bei
Effect.Appear(meinDiv, { ...options... });
wofür ist das wörtchen 'new' denn nun gut bzw. was ist besser/schneller - mit oder ohne new ?
gruß
jan
wofür ist das wörtchen 'new' denn nun gut bzw. was ist besser/schneller - mit oder ohne new ?
new instanziert ein objekt
instanzname = new klasse/objekt
zb "meindatumsobjekt = new Date();"
ist in praktisch jeder c-ähnlichen sprache so
wofür ist das wörtchen 'new' denn nun gut bzw. was ist besser/schneller - mit oder ohne new ?
new instanziert ein objekt
instanzname = new klasse/objekt
zb "meindatumsobjekt = new Date();"
ist in praktisch jeder c-ähnlichen sprache so
welchen vorteil habe ich nun durch die instanzierung - da es ja auch ohne instanzierung funktioniert.
ist es langsamer wenn ich instanziere ?
welchen vorteil habe ich nun durch die instanzierung - da es ja auch ohne instanzierung funktioniert.
eine instanz ist insich abgeschlossen, hat einen eigenen funktion/daten/variablen/methodenpool und stell nur eine (temporäre) kopie der eigentlichen klasse dar - wenn man eine klasse mit bestimmten methoden instaziert, greift man nur auf bestimmte teilbereiche zu
angenommen du hast du erstellst eine instanz "fahrrad" der klasse "fahrzeuge" dann nutzt die instanz zb die öffentlichen funktionen/methoden reifen, sattel, rahmen und gabel" - eine instanz "auto" könnte reifen, sitze, türen, kofferraum und lenkrad nutzen und dabei völlig eigene werte verwenden
während fahrrad.reifen() den zustand/wert "2" beschreibt, wäre der von "auto" 4
ich weiss nicht ob das jetzt verständlich war - aber sun hat hierzu eine ganz praktikable beschreibung
http://java.sun.com/docs/books/tutorial/java/concepts/object.html das bezieht sich zwar auf java, nicht auf javascript - aber prinzipiell machen das alle obektorientierten sprachen so
ist es langsamer wenn ich instanziere ?
ja, aber nicht merklich - jede instanz beansprucht natürlich einen eigenen speicherbereich
Hallo,
ist es langsamer wenn ich instanziere ?
ja, aber nicht merklich - jede instanz beansprucht natürlich einen eigenen speicherbereich
Wenn man die Instanz, die die mit »new« aufgerufene Konstruktorfunktion zurückgibt, gar nicht speichert, beansprucht sie natürlich auch keinen Speicher - d.h. nur im Moment der Ausführung der Konstruktorfunktion.
Die Zuweisungen an die Instanz, die Scriptaculous vornimmt, sind natürlich etwas langsamer.
Mathias
Hallo,
new Effect.Appear(meinDiv, { ...options... });
das gleiche ergebnis kommt wie bei
Effect.Appear(meinDiv, { ...options... });
new Effect.xyz ist sinnvoll, wenn du den Rückgabewert nutzt, also das Instanzobjekt. Das kannst du z.B. dafür nutzen, die Animation abzubrechen oder deren Status auszulesen (http://github.com/madrobby/scriptaculous/wikis/core-effects unten).
Also
var meinEffekt = new Effect.Appear(...);
// Tu was mit meinEffekt
Wenn du das nicht brauchst, kannst du auf das new wohl verzichten.
Mathias
new Effect.xyz ist sinnvoll, wenn du den Rückgabewert nutzt ...
var meinEffekt = new Effect.Appear(...);
Das ist Unsinn zumindest bei Effect.Appear. Aus dem Quellcode:
Effect.Appear = function(element) {
element = $(element);
var options = Object.extend({
from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
to: 1.0,
// force Safari to render floated elements properly
afterFinishInternal: function(effect) {
effect.element.forceRerendering();
},
beforeSetup: function(effect) {
effect.element.setOpacity(effect.options.from).show();
}}, arguments[1] || { });
return new Effect.Opacity(element,options);
};
Ob man diese Funktion mit oder ohne new aufruft, man bekommt immer eine Effect-Instanz zurück.
Das ist also identisch und das new in dem Fall unnötig:
var meinEffekt = new Effect.Appear(...);
var meinEffekt = Effect.Appear(...);
Mathias