function people()
{
   this.f1=function(){alert(321)} 
}
function student()
{
 
}
function init()
{
 st= new student()   student.prototype.f1=function(){alert(11)}//这两句调换就会报错.
 student.prototype= new people();         //这两句调换就会报错.为什么会这样的??
 
 st2= new student()
 st.f1();
 st2.f1();

 window.onload=init;

解决方案 »

  1.   

    st对象的类student的原型是一个Object对象,若调换,则这个Object对象没有f1方法导致st.f1()报错。
      

  2.   

        student.prototype= new people();
    这句执行的时候 student以经不是原来的 student了 他继承了 people
      

  3.   

    晕.可以详细点吗?
    一楼:student的原型是一个Object对象,若调换,则这个Object对象没有f1方法导致st.f1()报错。
    ---------------------------------------------------------------------------
     student.prototype.f1=function(){alert(11)}//我这句不是添加了一个f1方法吗??
    ========================================================================
    二楼:student.prototype= new people();
            这句执行的时候 student以经不是原来的 student了 他继承了 people
    ----------------------------------------------------------------------------
    它继承了people那 在 student.prototype.f1=function(){alert(11)}加上f1方法不行吗?
      

  4.   

    二楼:student.prototype= new people();
      这句执行的时候 student以经不是原来的 student了 他继承了 people
    ----------------------------------------------------------------------------
    它继承了people那 在 student.prototype.f1=function(){alert(11)}加上f1方法不行吗?当然行的啊 你第二个执行的 f1就是这个方法了
      

  5.   

    st定义时,student没有f1,student的prototype也没有f1,
    student.prototype= new people(); 
    student.prototype.f1=function(){alert(11)} 这样后,student的prototype变成了people对象,加的f1方法在这个people对象上,但是st的类student,和它的prototype 即那个Object对象,还是没有f1方法
         
      

  6.   

    报错的原因就是st和st2的prototype对象不相同,而在创建st时,它的prototype中没有f1.
    这样就会报错。如果用firefox,可以在后边写上alert(st.__proto__ == st2.__proto__)
      

  7.   

    说一个现象吧,一个男人甲和一个女人结婚了,生了一个孩子,这个孩子的父亲是男人甲。这个孩子和st对象很像后来,女人变心了,她又和男人乙结婚了,生了另一个孩子,那么这个孩子的父亲就是男人乙了。这个孩子和st2很像孩子们的妈妈是谁呢,相信大家猜出得出了,不错,正是student函数。男人甲是谁呢,相信大家心理也应有普了,男人甲正是Object对象,这是因为任何函数的原型对象都是Object,这当然不是绝对的,因为妈妈可以变心嘛。那么妈妈是怎么变的心呢,正是这句话:student.prototype= new people();
    student函数的原型对象变了,变成people对象了,也就是说女人爱上男人乙了,从这以后女人生的孩子的父亲就是男人乙了。    student.prototype.f1=function(){alert(11)}//这两句调换就会报错.
    这个时候,女人还爱着第一个男人,当然第一个男人就有fl这个属性了,当然第一个孩子就继承了fl这个属性了。     student.prototype= new people();         //这两句调换就会报错.为什么会这样的??
    这个时候,女人变心了,嫁给了第二个男人,但第一个孩子不能继承第二个男人的属性.但第二个孩子能继承,所以这个顺序不会报错,如果换顺序了,情况是这样的
    student.prototype= new people(); //女人跑了,没有为第一个男人做任何贡献,就嫁给了第二个男人,所以第一个孩子就没有f1这个属性了。student.prototype.f1=function(){alert(11)}//女人改变了第二个男人的fl属性,所以第二孩子的属性也改变了。
    哎扯远了点,呵呵
      

  8.   

    prototype只能增加方法、属性,不能替换现有方法属性