首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从javascript模块属性获取未定义

从javascript模块属性获取未定义
EN

Stack Overflow用户
提问于 2013-05-31 02:01:52
回答 3查看 451关注 0票数 0

我有种感觉我错过了一些明显的东西。我从javascript模块返回一个变量,但它始终未定义。

下面是模块:

代码语言:javascript
代码运行次数:0
运行
复制
var MyNs = MyNs || {}; 
MyNs.Global = function () {
   var privateTestVar;
   var init = function () {
       if (privateTestVar == null ) {
           privateTestVar = "this is a test" ;
           console.log( 'Init: ' + privateTestVar);
       }
   };

   var Public = {
       init: init,
       TestVar: privateTestVar
   }

   return Public;
} ();

这里有个电话:

代码语言:javascript
代码运行次数:0
运行
复制
MyNs.Global.init();console.log( 'Called: ' +MyNs.Global.TestVar);

init函数中的console.log工作正常并返回值,但另一个控制台日志返回未定义的值。我完全错过了。任何帮助都将不胜感激。

更新:--我已经对代码做了一些修改,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
    var privateTestVar = function () { return 'Test!'; }

var Public = {
    TestVar: privateTestVar
}

以及它的变体,但是它会将这个确切的文本返回到控制台:"function () {返回'Test!';}“

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-31 02:05:00

在这里分配Public时:

代码语言:javascript
代码运行次数:0
运行
复制
var Public = {
    init: init,
    TestVar: privateTestVar
}

privateTestVar仍未定义(因为init()尚未运行),因此TestVar属性被初始化为privateTestVar的值,即undefined

TestVar属性被分配为privateTestVar的值。如果它最初是未定义的(在本例中是这样的),它将保持这种状态,直到您将一些不同的东西分配给TestVar属性。我不会自动继承privateTestVar的未来值,这也许正是您所期望的。Javascript没有一种方法来指定一个变量总是包含分配给另一个变量的任何内容。privateTestVar和TestVar`各有各自的值。将某项分配给一个变量不影响另一个变量。

票数 3
EN

Stack Overflow用户

发布于 2013-05-31 02:07:44

我建议使用getter来使私有变量真正成为私有变量。这将正确地工作:

代码语言:javascript
代码运行次数:0
运行
复制
var Public = {
    init: init,
    getVar: function() { return privateTestVar; }
}

MyNs.Global.init();console.log( 'Called: ' +MyNs.Global.getVar());
票数 1
EN

Stack Overflow用户

发布于 2013-05-31 02:11:31

问题如@jfriend00所述。将代码更改为

代码语言:javascript
代码运行次数:0
运行
复制
var init = function () {
    if (privateTestVar == null ) {
        privateTestVar = "this is a test" ;
        Public.TestVar = privateTestVar;
        console.log( 'Init: ' + privateTestVar);
    }
};

我没有测试这个,但理论上应该有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16848692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档