这可能很简单,但我找不到答案,
我在Backbone视图中有一个命名函数。我试图为这个命名函数编写单元测试,我可以看到在函数范围内声明了一个变量。此变量的状态根据特定情况而变化。
我已经在我的测试套件中实例化了视图对象,当我执行console.log(viewObject.namedFunction)时,我看到正确记录了整个函数。现在我如何访问namedFunction中的变量,我期待像viewObject.namedFunction.variableName这样的东西但它不起作用,当我这样做时,它没有按预期工作。
如果变量绑定到viewObject范围,那么它就很容易访问它。但是在这种情况下,有些人可以帮助我在测试套件的视图对象中保留命名函数中的变量。
答案 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();
这绝不是唯一的方法,但我希望它有所帮助。