在 javascript 中读取命名函数内的变量值
Reading a variable value inside a named function in javascript
这可能很简单,但我找不到答案,
我在 Backbone 视图中有一个命名函数。我正在尝试为这个命名函数编写单元测试,我可以看到在函数范围内声明了一个变量。此变量的状态会根据某些情况发生变化。
我已经在我的测试套件中实例化了视图对象,当我执行 console.log(viewObject.namedFunction) 时,我看到整个函数都被正确记录了。现在我如何访问 namedFunction 中的变量,我期待像 viewObject.namedFunction.variableName 但它不会工作,当我这样做时,它没有按预期工作。
如果变量绑定到 viewObject 范围,那么访问它会很容易。但是在这种情况下,情况并非如此,有人可以帮助我在测试套件的视图对象中获取命名函数内的变量。
一种方法是这样的:
namedFunction = (function(){
var theActualFunction = function(){
//Do something
//Access variable like: theActualFunction.MyVariable
};
theActualFunction.MyVariable = "value";
return theActualFunction;
}());
我想我理解你的困惑,因为当你在 window
范围内使用 var
定义变量时,它会变成 window
对象上的 属性。 .. 似乎可以得出结论,当您在子作用域中定义一个变量时,它应该成为局部上下文的成员,对吗?没有。全局变量很特殊 ;-)
事实上,如果 是 情况,就会 没有隐私 !
如果您希望 sign
成为 public,请明确。
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();
这绝不是唯一的方法,但我希望它能有所帮助。
这可能很简单,但我找不到答案,
我在 Backbone 视图中有一个命名函数。我正在尝试为这个命名函数编写单元测试,我可以看到在函数范围内声明了一个变量。此变量的状态会根据某些情况发生变化。
我已经在我的测试套件中实例化了视图对象,当我执行 console.log(viewObject.namedFunction) 时,我看到整个函数都被正确记录了。现在我如何访问 namedFunction 中的变量,我期待像 viewObject.namedFunction.variableName 但它不会工作,当我这样做时,它没有按预期工作。
如果变量绑定到 viewObject 范围,那么访问它会很容易。但是在这种情况下,情况并非如此,有人可以帮助我在测试套件的视图对象中获取命名函数内的变量。
一种方法是这样的:
namedFunction = (function(){
var theActualFunction = function(){
//Do something
//Access variable like: theActualFunction.MyVariable
};
theActualFunction.MyVariable = "value";
return theActualFunction;
}());
我想我理解你的困惑,因为当你在 window
范围内使用 var
定义变量时,它会变成 window
对象上的 属性。 .. 似乎可以得出结论,当您在子作用域中定义一个变量时,它应该成为局部上下文的成员,对吗?没有。全局变量很特殊 ;-)
事实上,如果 是 情况,就会 没有隐私 !
如果您希望 sign
成为 public,请明确。
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();
这绝不是唯一的方法,但我希望它能有所帮助。