运行以下代码,会发现每次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——他们是相同的。

Tags: javascript, oop

No Comments 2008-06-27 21:48:09 by Homyu.Shinn