statische public JavaScript Variablen
Christian S.
- javascript
Hi,
gibt es eine einfachere Möglichkeit statische öffentliche JavaScript Variablen zu beschreiben??
Bisher mache ich es so:
function MyClass()
{
MyClass.StaticVariable = 0;
}
oder so:
function MyClass()
{
}
MyClass.StaticVariable = 0;
was mich nun sehr stört, ist das wenn ich mal den Funktionsnamen (hier die Klasse) ändere, dass ich dann das auch bei allen statischen Variablen machen muss.
Kann man auch einfacher statische Variablen angeben? ohne immer noch den Funktions/Klassennamen davor zu schreiben? (etwa so wie "this" bei nicht-statischen Membern).
Gruß
Christian
Hallo,
Kann man auch einfacher statische Variablen angeben? ohne immer noch den Funktions/Klassennamen davor zu schreiben? (etwa so wie "this" bei nicht-statischen Membern).
Du kannst über die Instanz-Eigenschaft constructor auf die Konstruktorfunktion zugreifen:
function Konstruktor () {
// Im Kontruktor sind drei Ansprechweisen möglich:
alert(
(Konstruktor === this.constructor) + "\n" +
(Konstruktor === arguments.callee)
); // Die liefern alle dasselbe Funktionsobjekt.
// Nehmen wir mal this.constructor
this.constructor.staticVariable = "bla";
// In einer Methode funktioniert this.constructor auch
this.func = function () {
alert(this.constructor.staticVariable);
};
}
var instanz = new Konstruktor();
instanz.func();;
Mathias
hallo Christian S., gruss molily,
Du kannst über die Instanz-Eigenschaft constructor auf die Konstruktorfunktion zugreifen:
function Konstruktor () {
// Im Kontruktor sind drei Ansprechweisen möglich:
alert(
(Konstruktor === this.constructor) + "\n" +
(Konstruktor === arguments.callee)
); // Die liefern alle dasselbe Funktionsobjekt.// Nehmen wir mal this.constructor
this.constructor.staticVariable = "bla";
/*
wobei darauf zu achten ist, [this.constructor] ausdruecklich
zu setzen, wenn man fuer seine objekte erreichen moechte, dass
[this.constructor] auch immer [arguments.callee] ist ...
/
this.constructor = arguments.callee;
/
.., denn konstruktoren, die eueber ihren [prototype]n
andere konstruktoren referenzieren, geben genau eine
solche referenz als angeblich eigenen konstruktor aus.
*/
// In einer Methode funktioniert this.constructor auch
this.func = function () {
alert(this.constructor.staticVariable);
};
}
var instanz = new Konstruktor();
instanz.func();
und hier noch mal ein beispiel, um das oben gesagte zu demonstrieren:
~~~javascript
var Collection = function () {
alert("[collection].constructor : " + this.constructor + " === Collection? " + (this.constructor === Collection));
this.constructor = arguments.callee; // needs to be set explicitly in order to break prototype chain.
alert("[collection].constructor : " + this.constructor + " === Collection? " + (this.constructor === Collection));
};
Collection.prototype = new Array();
var myColl = new Collection();
so long - peterS. - pseliger@gmx.net