代码看起来像这样:
function mySuperObject() {
var self = this;
self.p1 = "";
self.p2 = "jkejie";
// and others
}
mySuperObject.prototype.func1 = function(){...}
// and others
介绍命名空间:
在阅读了许多文章之后,我决定用一种非常简单的方式来定义命名空间,可能是最简单的方式。基本上就是定义一个指向对象字面量的变量,并且内容是对象(代码段中的“mySuperObject”)。构造函数如下:mySuperObjectInNS。
对象的代码:
var MYNAMESPACE = {
//some variable outside the object
file : "ConstructorInNamespace_obj.js: ",
//Defining contructor function inside a namespace
mySuperObjectInNS : function(propOne, propTwo){
var self = this;
self.objectName = "mySuperObject";
self.propertyOne = propOne;
self.propertyTwo = propTwo;
self.doSomething = function(){
console.log(file + " doSomething called - function of object");
};
///many more functions and attributes
}
}
MYNAMESPACE.mySuperObjectInNS.prototype.specialFunction = function(){
console.log(file + " specialFunction called - prototypical inheritance defined in file of object, outside of namespace");
};
///many more functions and attributes
在另一个文件中,可以按照以下方式实例化对象:
...
var objOne = new MYNAMESPACE.mySuperObjectInNS("param11", "40");
//following line works just fine
objOne.doSomething();
....
问题:
- 在我看来,这一切都是关于定义一个对象字面量的,但当我尝试定义该对象的“私有”属性时,我最终会遇到麻烦。这是正确的吗?
- mySuperObjectInNS仍然是一个构造函数吗?(对我来说它似乎是其他东西,即使我可以从它实例化对象。
- 这是一种非常糟糕的命名空间方式还是还算可以接受的?
var mySuperFunction = function() { ... }
)还是函数声明(function mySuperFunction() { ... }
),都没有关系。 - T.J. Crowder