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

标签 javascript backbone.js mocha.js backbone-views

这可能很简单,但我在寻找答案时迷失了方向,

我在 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/

相关文章:

javascript - ThreeJS 更新 Shape 的尺寸

javascript - EaselJS、Canvas、位图图像质量低且注册点不起作用

javascript - insertMany 不是函数

javascript - 修复具有多个 Javascript 框架的项目

当集合获取成功回调调用渲染时测试 Backbone View

javascript - 使用主干 View 引用窗口变量

javascript - 未捕获的语法错误 : Unexpected token import in "backbone.radio.js"

node.js - Mocha 茶兑现多项 promise

javascript - Nock 拦截器链接,第二个模拟被忽略

javascript - 如何在 mocha 中使用嵌套测试执行使测试依赖