在这个JS片段中,我有一个带有两个版本的私有函数的对象(bar和bar2)。我声明了两个实例,但是我发现一个函数私有版本(栏)似乎错误地访问了OTHER对象中的私有变量v的值。有人可以告诉我为什么吗?
Eric = function(_v)
{
var v = _v;
bar = function() {
alert(v);
};
function bar2() {
alert(v);
};
this.foo = function() {
bar();
};
this.foo2 = function() {
bar2();
};
};
var e = new Eric('I am Eric');
var e2 = new Eric('I am Eric II');
e2.foo(); // outputs "I am Eric II"
e.foo(); // outputs "I am Eric II" ------ WHY?
e2.foo2(); // outputs "I am Eric II"
e.foo2(); // outputs "I am Eric"
非常感谢
安德鲁
最佳答案
bar = function() {
alert(v);
};
您已将
bar
设置为全局。这意味着bar
是调用e2 = new Eric("I am Eric II");
中定义的第二个小节功能通过使用
var bar = ...
将其设置为本地可解决此问题。作为单独的注释,您忘记了
var Eric
。您也不需要本地声明
var v
,因为您的构造函数参数_v
在范围内。您可以继续使用该参数。