Ich versuche, eine Klasse namens MyClass in einem Namespace MyNamespace zu definieren. Der Klassenkonstruktor sollte ein einzelnes Zeichenfolgenargument akzeptieren. Es sollte auch eine Funktion namens sayHello haben, die die an den Konstruktor übergebene Zeichenfolge zurückgibt.
Der interessante Teil ist, dass MyClass nur über den Namespace zugänglich sein sollte und keine zusätzlichen globalen Variablen definieren sollte. Code sollte einen vorhandenen Namespace nicht neu definieren, sondern auch funktionieren, wenn der Namespace zuvor nicht definiert wurde.
Was mache ich hier falsch?
var MyNamespace = {
MyClass: (function(string){
function sayHello(){
return string;
}
})()
console.log(new MyNamespace.MyClass('Hello!'));
}
Und der Link zur Geige: http://jsfiddle.net/marcusdei/wqvc0k1j/8/
Das sind keine Hausaufgaben, ich lerne JS für meine Karriere. Vielen Dank!
3 Antworten
Der Klassenkonstruktor sollte ein einzelnes Zeichenfolgenargument akzeptieren.
var MyClass = function (str) { };
Es sollte auch eine Funktion namens
sayHello
haben, die die an den Konstruktor übergebene Zeichenfolge zurückgibt.
var MyClass = function (str) {
this._str = str;
};
MyClass.prototype.sayHello = function () {
return this._str;
};
Der interessante Teil ist, dass
MyClass
nur über den Namespace zugänglich sein sollte und keine zusätzlichen globalen Variablen definieren sollte.
MyNamespace.MyClass = function (str) {
this._str = str;
};
MyNamespace.MyClass.prototype.sayHello = function () {
return this._str;
};
Code sollte einen vorhandenen Namespace nicht neu definieren, sondern auch funktionieren, wenn der Namespace zuvor nicht definiert wurde.
var MyNamespace = MyNamespace || {};
MyNamespace.MyClass = function (str) {
this._str = str;
};
MyNamespace.MyClass.prototype.sayHello = function () {
return this._str;
};
Ergebnis:
var obj = new MyNamespace.MyClass('foo');
console.log(obj.sayHello()); // foo
Dies ist wahrscheinlich was Sie wollen.
var MyNamespace = {
MyClass: function (string) {
return function sayHello(){
return string;
}
}
}
console.log(new MyNamespace.MyClass('Hello!')());
Wenn Sie nach etwas wie einem privaten Mitglied suchen, würden Sie es tun
var MyNamespace = (function(){
var MyClass = function (string) {
return function sayHello() {
return string;
}
}
console.log(new MyClass('Hello!')());
})()
function MyClass() {
this.MyAttribute = function(string) {
return string;
};
}
console.log(new MyClass().MyAttribute('hello'));