运行以下代码,会发现每次hello()出来的值都增加了——虽然他们是属于不同实例,
ProtoBase = function()
{
var i = 0;
this.Get = function()
{
alert(i.toString());
i++;
}
}
ProtoDerived = function()
{
this.Hello = function()
{
this.Get();
}
}
ProtoDerived.prototype = new ProtoBase();
pd1 = new ProtoDerived();
pd2 = new ProtoDerived();
pd1.Hello();
pd2.Hello();
这是为什么呢?其实很简单,var申明的变量的可访问域是在其所属的“{ }”以内的所有代码块。因此,当Get被调用时,他所访问的i就是离他最近用 var 申明的私有i——他们是相同的。

