在JavaScript中访问内部变量

时间:2013-03-02 20:18:55

标签: javascript properties private gecko

我正在为某个网站撰写userscript。 我需要访问函数中的内部变量。例如,在以下代码中我需要访问 对象c的“私有财产”b

function a(){
    var b;
    //assignment to b and other stuff
};
var c=new a();

我不能更改网站代码,我只能更改BORWSER EXTENSION SCRIPTISH并写一个USERSCRIPT。 我的浏览器是最新的Firefox。 即使我必须更改Scriptish,我也需要获取访问权限。

3 个答案:

答案 0 :(得分:1)

您无法访问函数的内部变量,您应该将其设置为全局变量以从外部获取它。

var b;
function a(){
 b=1;
    //assignment to b and other stuff
};
var c=new a();
document.write(c.b);

,输出为1。

答案 1 :(得分:0)

在您的代码中b不是私有变量,而是局部变量。执行var c=new a(); b后不再存在。因此,您无法访问它。

但如果你使用closures,一切都会改变:

function a(){
    var b;
    //assignment to b and other stuff
    this.revealB = function() {
        return b;
    }
};
var c = new a();
alert(c.revealB());

这里b仍然是一个局部变量,但它的生命周期受到闭包的影响,因此当我们调用revealB时它仍然存在。

答案 2 :(得分:0)

这很简单,对于继承应用程序来说非常棒:

您只需返回您想要的任何内容,并可能通过方法返回它,稍后在其他函数中重用它并在其上构建。

示例如下:

    function a(){
        var b;
        //assignment to b and other stuff
        return b;
      };

     // or

   function a(){
        var b, result;
        //assignment to b and other stuff
        returnInitial: function() {
           return b;
         }
        // other stuff with b
        return result;
   };

稍后您可以使用所谓的“寄生继承”并使用所有局部变量并添加新方法在其他函数内启动此整个函数,如下所示:

var a function() {
        var b, result;
        //assignment to b and other stuff
        returnInitial: function() {
           return b;
         }
        // other stuff with b
        return result;
}
var extendedA function() {
    var base = new a;
    var b = a.returnInitial();
    a.addToB = function (c) {
    var sum = c + a.returnInitial();
    return sum;
    }
}

所以你现在可以得到

var smt = new extendA();
var c = 12; //some number
var sumBC = extendA.addToB(c);

对于所有这些伟大的实践,我建议yutube搜索doug crockford关于js对象处理的讲座。

请注意,您需要使用new,因为如果您不初始化新实例,javascript使用的动态对象处理会导致原始对象崩溃。