这个问题是旧问题Adding scope variable to a constructor的简化版。问题很简单,我可以在不更改函数的情况下将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);
line Uncaught ReferenceError:priv未定义错误。
我需要一种方法来重新定义fu()函数对象的范围。
答案 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';
这将使函数无需更改即可正常工作,但变量不是非常私密......