这可能很简单,但我在寻找答案时迷失了方向,
我在 Backbone View 中有一个命名函数。我正在尝试为这个命名函数编写单元测试,我可以看到在函数作用域中声明了一个变量。该变量的状态根据特定场景而变化。
我已经在我的测试套件中实例化了 View 对象,当我执行 console.log(viewObject.namedFunction) 时,我看到整个函数都被正确记录。现在我如何访问namedFunction内的变量,我期待类似viewObject.namedFunction.variableName的东西,但它不起作用,当我这样做时,它没有按预期工作。
如果变量与 viewObject 范围绑定(bind),那么访问它就会很容易。但在这种情况下,情况并非如此,所以请有人帮助我从测试套件中的 View 对象中获取命名函数内的变量。
最佳答案
我想我理解您的困惑,因为当您在 window
范围中使用 var
定义变量时,它就成为 window
上的属性> object... 似乎当您在子作用域中定义变量时,它应该成为本地上下文的成员,对吧?没有。全局变量很特别;-)
事实上,如果是这样的话,那就没有隐私了!
如果您希望sign
公开,请明确说明。
obj = {
namedFunction : function myself() {
console.log(myself);
myself.sign = 23;
}
};
obj.namedFunction.sign;
这种方法的唯一问题是您现在可以从任何地方为 sign
分配新值。解决这个问题的经典且首选的方法是为您的私有(private)变量创建一个 getter 函数。
var obj = {
namedFunction : function myself() {
var sign = 3;
myself.getSign = function(){return sign;};
}
};
obj.namedFunction.getSign();
这绝不是唯一的方法,但我希望它有所帮助。
关于javascript - 在 javascript 中读取命名函数内的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28618343/