在javascript中读取命名函数内的变量值

时间:2015-02-19 22:34:05

标签: javascript backbone.js mocha backbone-views

这可能很简单,但我找不到答案,

我在Backbone视图中有一个命名函数。我试图为这个命名函数编写单元测试,我可以看到在函数范围内声明了一个变量。此变量的状态根据特定情况而变化。

我已经在我的测试套件中实例化了视图对象,当我执行console.log(viewObject.namedFunction)时,我看到正确记录了整个函数。现在我如何访问namedFunction中的变量,我期待像viewObject.namedFunction.variableName这样的东西但它不起作用,当我这样做时,它没有按预期工作。

如果变量绑定到viewObject范围,那么它就很容易访问它。但是在这种情况下,有些人可以帮助我在测试套件的视图对象中保留命名函数中的变量。

2 个答案:

答案 0 :(得分:1)

这样做的一种方法是:

namedFunction = (function(){
     var theActualFunction = function(){
          //Do something
          //Access variable like: theActualFunction.MyVariable
     };
     theActualFunction.MyVariable = "value";
     return theActualFunction;
}());

答案 1 :(得分:1)

我认为我理解您的困惑,因为当您在var范围内使用window定义变量时,它会成为window对象上的属性...它似乎当你在子范围中定义变量时,它应该成为本地上下文的成员,对吗?不。全球是特殊的; - )

事实上,如果那个 的话,就会有没有隐私

如果您希望sign公开,请明确。

obj = {
    namedFunction : function myself() {
        console.log(myself);
        myself.sign = 23;
    }
};
obj.namedFunction.sign;

此方法的唯一问题是您现在可以从任何地方为sign分配新值。解决此问题的经典和首选方法是为您的私有变量创建一个getter函数。

var obj = {
    namedFunction : function myself() {
        var sign = 3;
        myself.getSign = function(){return sign;};
    }
};
obj.namedFunction.getSign();

这绝不是唯一的方法,但我希望它有所帮助。