我正在尝试在名称空间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。 谢谢!
答案 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'));