本帖最后由 wang_zhixing 于 2012-03-07 22:48:11 编辑

解决方案 »

  1.   

    //首先为什么出现"something"   Cons.prototype.info="changed!";  //开始时,你修改了原型属性的info值,但你实例化后(var inst=new Cons()),里面又有Cons.prototype.info="something";//所以值又值改了
    所以值是"something" 
    Cons.prototype.newInfo  //可以在原型对象中建立新的属性:是可以的,,你可以创建n个属性
      

  2.   

    Cons.prototype.newInfo  和Cons.prototype.info 是不同的,但都属于Cons这个对象
      

  3.   


    阿斌哥说得有道理,其实这只是一个执行顺序的问题
    首先,JS解释器会提前处理函数和变量声明,此时已经创建了 inst 、 Cons 和 Cons.prototype
    接着开始执行代码,到 Cons.prototype.info="changed" 时为 Cons.prototype 添加了属性 info:"changed"
    然后遇到 new Cons() 开始执行函数,将函数内部为 prototype 赋的值放入 Cons.prototype 中
    由于发现 info 重名,所以原来的值被覆盖 info:"something" ,如果将 Cons.prototype.info="changed" 放在后面,则覆盖顺序刚好相反
    最后,将创建好的对象交给 inst