Verständnisfrage
Marco
- javascript
Hi,
folgender Codeschnippsel habe ich hier http://www.digital-web.com/articles/objectifying_javascript/ gefunden:
function Animation(element){
var looped = 0;
var e = element;
function construct() {
this.loopCount = function() {
return looped;
}
this.loop = function() {
looped++;
}
}
return new construct();
}
var animateLogin = new Animation();
animateLogin.loop();
alert(animateLogin.loopCount()); // it's 1
alert(animateLogin.looped); // undefined!
Ich verstehe denn Sinn des return new construct()
: var looped
und var e
sind für animateLogin
nicht definiert und somit privat. Was ich nicht verstehe: Dies wäre doch auch der Fall wenn man das ganze ohne Rückgabewert machen würde (also die Zeile return new construct();
entfernen würde weil die Variabeln ja ohnehin nur lokal gültig sind da sie mit var
definiert wurden? Oder habe ich da etwas falsch verstanden?
Viele Grüsse
Marco
Hallo,
Ich verstehe denn Sinn des
return new construct()
:var looped
undvar e
sind füranimateLogin
nicht definiert und somit privat. Was ich nicht verstehe: Dies wäre doch auch der Fall wenn man das ganze ohne Rückgabewert machen würde (also die Zeilereturn new construct();
entfernen würde
Verstehe ich auch nicht - bloß um private Eigenschaften zu erhalten, braucht man das jedenfalls nicht. Darüber hinaus sehe ich in dieser Schreibweise keine Vorteile.
Man ist gerade in einer Phase der Art »Toll, was man mit JavaScript alles machen kann!« - da wird mitunter unnötig komplizierter Code, der irgendwie objektorientiert aussieht, als supercool verkauft, dabei leistet er gar nichts besonderes.
Mathias
Hallo,
Verstehe ich auch nicht - bloß um private Eigenschaften zu erhalten, braucht man das jedenfalls nicht. Darüber hinaus sehe ich in dieser Schreibweise keine Vorteile.
Naja, man beeinflusst, was bei Instance.constructor ausgegeben wird.
Beispiel:
function AnyObject() {
var privateProp = "a private property";
this.publicProp = "a public property";
var privateMethod = function () {
alert("I am a private method.");
};
this.privilegedMethod = function () {
alert("I am a privileged method. I can call private methods. And " + privateProp + ".");
privateMethod();
};
}
var myObj = new AnyObject();
alert(myObj.publicProp);
myObj.privilegedMethod();
alert(myObj.constructor);
vs.
function AnyObjectSec() {
var privateProp = "a private property";
var publicPropSec = "a public property";
var privateMethod = function () {
alert("I am a private method.");
};
var privilegedMethodSec = function () {
alert("I am a privileged method. I can call private methods. And " + privateProp + ".");
privateMethod();
};
var construct = function() {
this.publicProp = publicPropSec;
this.privilegedMethod = privilegedMethodSec;
}
return new construct();
}
myObj = new AnyObjectSec();
alert(myObj.publicProp);
myObj.privilegedMethod();
alert(myObj.constructor);
Allerdings:
alert(AnyObjectSec.toString());
;-)
viele Grüße
Axel
[code lang=javascript]
function Animation(element){
function construct() {
...
}
return new construct();
}
Ehrlich gesagt 100% verstehen tu ich das auch nicht, es kommt daher http://javascript.crockford.com/prototypal.html.
Struppi.