只能通过命名空间访问MyClass

时间:2015-08-05 09:10:27

标签: javascript class

我正在尝试在名称空间MyNamespace中定义一个名为MyClass的类。类构造函数应该接受单个字符串参数。它还应该有一个名为sayHello的函数,它返回传递给构造函数的字符串。

有趣的是,MyClass只能通过命名空间访问,不应定义任何额外的全局变量。代码不应重新定义现有的命名空间,但如果先前未定义命名空间,则也应该起作用。

我在这里做错了什么?

var MyNamespace = {
  MyClass: (function(string){
    function sayHello(){
      return string;
    }
  })()
    console.log(new MyNamespace.MyClass('Hello!'));
}

指向小提琴的链接:http://jsfiddle.net/marcusdei/wqvc0k1j/8/

。这不是家庭作业,我正在为我的职业生涯学习JS。 谢谢!

3 个答案:

答案 0 :(得分:2)

  

类构造函数应该接受单个字符串参数。

var MyClass = function (str) { };
  

它还应该有一个名为sayHello的函数,它返回传递给构造函数的字符串。

var MyClass = function (str) {
    this._str = str;
};

MyClass.prototype.sayHello = function () {
    return this._str;
};
  

有趣的是,MyClass只能通过命名空间访问,不应定义任何额外的全局变量。

MyNamespace.MyClass = function (str) {
    this._str = str;
};

MyNamespace.MyClass.prototype.sayHello = function () {
    return this._str;
};
  

代码不应重新定义现有的命名空间,但如果先前未定义命名空间,则也应该起作用。

var MyNamespace = MyNamespace || {};

MyNamespace.MyClass = function (str) {
    this._str = str;
};

MyNamespace.MyClass.prototype.sayHello = function () {
    return this._str;
};

结果:

var obj = new MyNamespace.MyClass('foo');
console.log(obj.sayHello()); // foo

答案 1 :(得分:0)

这可能是你想要的。

var MyNamespace = {
    MyClass: function (string) {
        return function sayHello(){
            return string;
        }
    }
}

console.log(new MyNamespace.MyClass('Hello!')());

如果您正在寻找像私人会员这样的东西

var MyNamespace = (function(){
    var MyClass = function (string) {
        return function sayHello() {
            return string;
        }
    }

    console.log(new MyClass('Hello!')());
})()

答案 2 :(得分:0)

function MyClass() {
    this.MyAttribute = function(string) {
        return string;
    };
}

console.log(new MyClass().MyAttribute('hello'));