0

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

这是小提琴

这是代码:

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); 

行 Uncaught ReferenceError: priv is not defined 错误。

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

4

2 回答 2

0

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

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

然后在您的代码中:

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

或以点表示法:

fu.NewPrivateVar = "someting!";

最后:

fu.DoStuff(fu.NewPrivateVar);

结果是:

"something!"

那是你想要做的吗?

于 2012-09-02T00:28:41.750 回答
0

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

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

window.priv = 'private';

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

于 2012-09-02T00:38:40.237 回答