javascript - 访问被闭包困住的变量

标签 javascript

我想知道是否有任何方法可以从函数外部访问函数中被闭包捕获的变量;例如如果我有:


A = function(b) {
    var c = function() {//some code using b};
    foo: function() {
        //do things with c;
    }
}

有什么方法可以访问 A 的实例中的 c。像这样的东西:


var a_inst = new A(123);
var my_c = somejavascriptmagic(a_inst);

最佳答案

闭包范围内的简单 eval 仍然可以访问所有变量:

function Auth(username)
{
  var password = "trustno1";
  this.getUsername = function() { return username }
  this.eval = function(name) { return eval(name) }
}

auth = new Auth("Mulder")
auth.eval("username") // will print "Mulder"
auth.eval("password") // will print "trustno1"

但是你不能直接覆盖访问闭包作用域的方法(比如 getUsername()),你还需要一个简单的评估技巧:

auth.eval("this.getUsername = " + function() {
  return "Hacked " + username;
}.toSource());
auth.getUsername(); // will print "Hacked Mulder"

关于javascript - 访问被闭包困住的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4472529/

相关文章:

javascript - Vue.js 从数组添加类

javascript - 查找页面上的每个 radio 组

javascript - jQuery 和 HTML5 标签?

javascript - JavaScript 可以在重新加载后保持任何状态吗?

javascript - 为什么添加默认参数值会在修改参数时改变行为?

javascript - 表格行的 SlideToggle

javascript - 你会如何将网站从 Prototype 切换到 jQuery

javascript - d3 剪辑路径不适用于填充折线图

javascript - jQuery:如果新对象是使用 jQuery.extend() 创建的,则 object[property].push() 会修改旧对象

javascript - 所选选项值的 jquery 验证警报