在函数之外定义私有变量,该变量将由新创建模式使用

时间:2012-09-02 00:17:59

标签: javascript oop prototype-programming

这个问题是旧问题Adding scope variable to a constructor的简化版。问题很简单,我可以在不更改函数的情况下将priv变量添加到fu()的范围吗? (不添加功能块内部)

Here is fiddle

以下是代码:

fff = function() {
    alert('constructed');
    //alert(priv);
};
pro = {
    pub: 'public'
}
var make = function(fu, pro) {

    var priv = 'private';
    fu.prototype = pro
    return function() {
      return new fu();
    };
};

var cls = make(fff, pro);
var obj = cls();

alert(obj.pub);​

如您所知,您是否取消评论

//alert(priv); 

line Uncaught ReferenceError:priv未定义错误。

我需要一种方法来重新定义fu()函数对象的范围。

2 个答案:

答案 0 :(得分:0)

我没有看到列出的fu对象,但我认为答案是肯定的,你可以在不改变“功能”的情况下添加私有变量。现在,我可能会遗漏一些东西,但如果我跟着你,这就是你想要的:

var fu = {
           DoStuff: function(someVar){
            alert(someVar);
}
};

然后在你的代码中:

fu["NewPrivateVar"] = "something!";

或点符号:

fu.NewPrivateVar = "someting!";

最后:

fu.DoStuff(fu.NewPrivateVar);

结果:

"something!"

这是你想要做的吗?

答案 1 :(得分:0)

您无法通过从对象或闭包内部调用函数来更改函数的范围。

但是,您可以将变量添加到函数的范围中,即在全局范围中:

window.priv = 'private';

这将使函数无需更改即可正常工作,但变量不是非常私密......