使用单个全局命名空间,如何从工具方法访问命名空间的属性/方法?

时间:2013-03-16 03:56:59

标签: javascript inheritance closures prototypal-inheritance

当使用单个全局名称空间构建各种工具时,我们如何从工具方法访问名称空间对象的属性或方法,而不是在外面四处走动呢?

OT,“我们的工具”成为名称空间。

我们可以做到:

var OT = function(){ // Closure
   var Turkey = 'Im a Turkey!';
   return this;
}();

var OT = { // Object Literal
   Turkey:'Im a Turkey!'
};

在任何一种情况下,我们都会将工具添加到OT对象中,例如:

OT.GridInterface = function (){
   // A Grid tool
   this.DoSomething();
}
OT.GridInterface.prototype = new OT.BaseInterface();


OT.GridInterface.prototype.DoSomething = function(){
   console.log(Turkey); // undefined
   console.log(OT.Turkey); // undefined with Closure, works with Obj Literal*
   console.log(this.Turkey); // undefined
}

// * This goes around the outside to get the property publicly rather than up through the inside.

似乎每个工具在技术上都是OT的方法,并且该方法的方法应该能够访问命名空间的Turkey属性,因为内部函数应该能够访问外部函数的属性?

我的目标是能够向OT添加共享配置变量以及一些实用工具方法,OT方法的所有工具都可以使用。理想情况下,这些工具和属性应该可以从工具中读取/使用,但是它们是不可变的。

1 个答案:

答案 0 :(得分:0)

您可以阅读here,其中详细介绍了JavaScript中的私有成员。

基本上,你所要求的是不可能的。

必须在闭包中定义所有函数,或者Turkey需要公开。