我有一个Shape类,它在全局范围内定义:
function Shape(t) {
this.type;
Shape.prototype.init = function(){
this.type = t;
//more work here
}
this.init();
}
我想将所有全局函数/类合并到一个类中,以避免与全局命名空间冲突
function Util(){}
Util.Shape = function(){...}
Util.Point = function(){...}
这样可行,但我不喜欢每次都重复Util.
,所以我使用像命名空间这样的属性来处理相关函数,在这种情况下,math:
Util.math = {
Shape: function(t) {
this.type;
Shape.prototype.init = function(){
this.type = t;
//more work here
}
this.init();
},
Point: function(t) {...}
}
但这不起作用;抱怨this.init()
;这是有道理的,因为这里不需要Shape.prototype
,所以它被删除了:
Util.math = {
Shape: function(t) {
this.type;
this.init = function(){
this.type = t;
}
this.init();
}
}
立即行动:
var square = new Util.math.Shape('square');
var circle = new Util.math.Shape('circle');
console.log(square.type); // 'square'
console.log(circle.type); // 'circle'
问题:
这种方法有什么问题吗?更有效/更清洁的方式吗?
另外,为什么这不起作用?(这是coolness)
Util.math = {
Shape: function(t) {
this.type;
this.init = function(){
this.type = t;
}
}.init(); //<------coolness
}
答案 0 :(得分:0)
你也可以这样做:
var myLib = (function() {
var obj = {};
function Shape(t) {
this.init(t);
}
Shape.prototype.init = function(t){
this.type = t;
}
obj.Shape = Shape;
// more stuff
return obj;
}());
var shape = new myLib.Shape('circle');
console.log(shape.type); // circle
假设 init 只是一个例子。