使用此关键字访问Javascript模块模式中的公共变量

使用此关键字访问Javascript模块模式中的公共变量,javascript,global-variables,Javascript,Global Variables,我一直在研究如何不使用全局变量 我不知道如何使用“this”访问返回对象中的公共变量 console.log(this.myPublicProperty); 但如果我使用: console.log(MYAPP.myProject.myModule.myPublicProperty); 我会在日志中看到变量 当我尝试访问那个公共变量时,我得到了“未定义”。 我是否缺少示例代码中未显示的内容 谢谢 var MYAPP = {}; MYAPP.myProject = {}; MYAPP.myPro

我一直在研究如何不使用全局变量

我不知道如何使用“this”访问返回对象中的公共变量

console.log(this.myPublicProperty);
但如果我使用:

console.log(MYAPP.myProject.myModule.myPublicProperty);
我会在日志中看到变量

当我尝试访问那个公共变量时,我得到了“未定义”。 我是否缺少示例代码中未显示的内容

谢谢

var MYAPP = {};
MYAPP.myProject = {};
MYAPP.myProject.myModule = function () {

    //"private" variables:
    var myPrivateVar = "I can be accessed only from within MYAPP.myProject.myModule.";

    //"private" method:
    var myPrivateMethod = function () {
        console.log("I can be accessed only from within MYAPP.myProject.myModule");
    }

    return  {
        myPublicProperty: "I'm accessible as MYAPP.myProject.myModule.myPublicProperty.",
        myPublicMethod: function () {
            console.log("I'm accessible as MYAPP.myProject.myModule.myPublicMethod.");

            //Within myProject, I can access "private" vars and methods:
            console.log(myPrivateVar);
            console.log(myPrivateMethod());

            //The native scope of myPublicMethod is myProject; we can
            //access public members using "this":
            console.log(this.myPublicProperty);
        }
    };
}(); // the parens here cause the anonymous function to execute and return

我不喜欢使用
this
和动态绑定来访问公共变量,因为如果我将某个函数作为回调或类似的方式传递,它可能会中断。我希望模块中的引用是静态的:

var M = { //explicit name
    f1: function(){ return M.f2(); },
    f2: function(){ }
};

return M;

您如何以及何时尝试访问您的公共财产?你能展示一些代码吗?
myPublicMethod
的本机范围是
myProject
:不,如果你能这样说的话,它是
MYAPP.myProject.myModule
。这取决于如何调用myPublicMethod。@Zoidberg我还没有做任何事情,只是想了解它是如何工作的。除了前两行代码外,我从YUI博客条目中删除了代码,将YAHOO改为MYAPP,并在TextMate和Chrome中进行测试。可能是因为我使用了console.log,而博客条目中有YAHOO.log?我还没有尝试在对象中使用this.myPublicProperty,但我将尝试使用它,而不是尝试打印到日志中。我对理解这一点感觉很好,直到我了解了最后一点//使用“this”访问公共成员:
console.log(myPrivateMethod())
logs
undefined
,因为
myPrivateMethod
记录了一些内容,然后隐式返回
undefined
(因为它不返回任何内容)。因此,该日志将计算为
console.log(未定义)
。使用
this.myPublicProperty
的最后一个
控制台.log
没有问题;至少我无法重现此的任何问题。