在这个JS片段中,我有一个具有两个版本的私有函数(bar和bar2)的对象.我声明了两个实例,但是我发现私有函数(bar)的一个版本似乎错误地访问了OTHER对象中私有var 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"
Run Code Online (Sandbox Code Playgroud)
非常感谢安德鲁
bar = function() {
alert(v);
};
Run Code Online (Sandbox Code Playgroud)
你已经做到了bar全球化.这意味着这bar是您通话中定义的第二个条形函数e2 = new Eric("I am Eric II");
通过使用var bar = ...它来使其本地修复此问题.
作为一个单独的笔记,你忘记了var Eric.
您也不需要本地声明,var v因为构造函数参数_v在范围内.您可以继续使用该参数.
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |