我正在尝试在命名空间中创建一个函数,它将为我提供一个新的对象实例。
尝试执行以下操作时出现语法错误:
var namespace = {
a : function(param){
this.something = param;
},
a.prototype.hi = function(){
alert('hi');
},
b : function(){
var t = new a('something');
}
};
这样做的正确语法是什么?是不是可以在namespace
对象中进行?我不想先声明命名空间。感谢
答案 0 :(得分:7)
我不想先声明命名空间。
你可以做这样奇怪的事情:
var namespace = {
init: function() {
a.prototype.whatever = function(){};
},
a: function(x) {
this.x = x;
}
}
namespace.init();
var myA = new namespace.a("x");
但是如果要封装所有内容,为什么不尝试模块模式呢?它更干净:
var namespace = (function() {
function a() {};
function b(name) {
this.name = name;
};
b.prototype.hi = function() {
console.log("my name is " + this.name);
}
return {
a: a,
b: b
}
})();
答案 1 :(得分:0)
javascript命名空间是一个对象,因此您只能使用key: value
对,但不能使用代码(与a.prototype.hi = function() {...}
一样)。
你应该将它分成两部分:声明然后代码:
var namespace = {
a : function(param){
this.something = param;
},
b : function(){
var t = new a('something');
}
};
namespace.a.prototype.hi : function() { ... }
答案 2 :(得分:0)
我不知道你想要什么,但这有效:
var namespace = {
a: function() {
function a() {
}
a.prototype.hi = function() {
console.log("hi");
}
return new a;
}
}
var obj = new namespace.a();
obj.hi()
// -> 'hi'