Javascript 不调用“test”就可以得到b吗?

Javascript 不调用“test”就可以得到b吗?,javascript,node.js,Javascript,Node.js,我目前正在考虑在node.js中实现一个虚拟机,用于封装其他应用程序。为此,我将覆盖一些基本知识,但有一点我不确定 var A = (function() { var b = 1; var A = function() {}; A.prototype.test = function() { // Can't touch this return b; }; A.prototype.foo = function(callback) {

我目前正在考虑在node.js中实现一个虚拟机,用于封装其他应用程序。为此,我将覆盖一些基本知识,但有一点我不确定

var A = (function() {
    var b = 1;

    var A = function() {};
    A.prototype.test = function() { // Can't touch this
        return b;
    };
    A.prototype.foo = function(callback) {
        callback();
    };
    return A;
})();

// Objective: Get b without touching `test` in any way

这有可能吗?通过注入原型或使用call()、apply()、bind()或类似方法?任何其他类型的反射?

不使用
test
?使用不同的
功能

var A = (function() {
    var b = 1;

    // ...    

    A.prototype.foo = function () {
        return b;
    };
    return A;
})();

console.log(new A().foo());

否则,不会。代码段是一个函数,只有通过在同一作用域中定义的函数才能访问局部变量,这就是它们的工作方式。

看起来你自己也会吃你的cookie;-)事实上,A.test()应该以书面形式返回b,除非我误解了您的意思……不能这样做。。。现在我的饼干!他说没有“触摸”测试,我认为这意味着你不能更改代码,不是说你不能调用它,但也许我错了…@Jonah:看看标题。;)已经谢谢你了。如果真的不可能,这会帮我一个忙。到目前为止我一直在尝试的事情:在闭包之外创建A.prototype.foo,并调用、应用、绑定到A和新的A()。这不起作用,正如预期的那样。我只是问自己,是否还有其他令人讨厌的注入机制,因为这会对我的应用程序的安全造成真正的风险,否则:)@dcode可能通过引擎的本机扩展实现。A,也许吧。现有的一些模块似乎已经接近了这个功能(不过只是猜测),比如。你说得对,这是可能的。我将阻止加载本机模块。我只是希望真的没有别的办法:)