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!

-1
Marco V 5 Aug. 2015 im 12:10

3 Antworten

Beste Antwort

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
2
deceze 5 Aug. 2015 im 09:28

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!')());
})()
0
potatopeelings 5 Aug. 2015 im 09:28
function MyClass() {
    this.MyAttribute = function(string) {
        return string;
    };
}

console.log(new MyClass().MyAttribute('hello'));
0
Quentin Hu 5 Aug. 2015 im 09:29