日期:2014-05-16  浏览次数:20353 次

Javascript 对象是如何获取原型的属性方法的?
function   ClassA(){   }
ClassA.prototype.flag   =   "A ";
function   ClassB(){   }

function   run()
{
      var   a   =   new   ClassA();
      alert(a.flag);
      alert(a.prototype);
      alert(a.constructor);
      a.constructor   =   ClassB;

      alert(a.prototype);
      alert(a.constructor);
      alert(a.flag);
}
上面这段代码的执行结果是:

undefined
function   ClassA(){   }
undefined
function   ClassB(){   }
A

显然,对象a不是动过prototype属性(因为不存在undefined)和constructor属性(改变后a依然可以找到falg)来查早prototype对象的。所以非常奇怪a如何找flag的呢?




------解决方案--------------------
个人认为可能是a对象没有重新被构造,所以除了你改了的属性其他的都没有变。想来可能是js里把constructor做为一个对象的普通属性来看待的。
------解决方案--------------------
prototype 是游离于ClassA对象之外的一个扩展
你把 a.constractor 改成 ClassB 只是把这个类的结构体变了,而没有改 prototype