function ok()
{

}
function init()
{
ok1= new ok()
ok1.f1=function(){alert(123)}
ok.prototype.f1=function(){alert(321)}
ok1.f1(); 
//大家看,这里创建的两个f1方法.有什么不一样的?
}
window.onload=init;

解决方案 »

  1.   

    ok1.f1是针对ok类的具体实例定义的方法,仅作用于该实例。ok.f1是在类中定义的方法,作用于其所有实例。
    function ok()
    {
        
    }
    function init()
    {
        ok1= new ok()
        ok1.f1=function(){alert(123)}
        ok.prototype.f1=function(){alert(321)}
        ok1.f1(); 
        ok2 = new ok();
        ok2.f1();
    }
      

  2.   

    ok1.f1=function(){alert(123)}
    它是为ok1加一个属性fl,这个f1只是ok1这个对像有
    ok.prototype.f1=function(){alert(321)}
    这句话话是为类的原型对象加的属性,不理解啥是原型对象没关系,关键是理解这样做有什么用,如果这句话执行了,那么用ok创建的所有对象都可以访问到f1这个属性。还要多一句嘴,对于javascript,当你访问对象的属性时,他会先在对象里面找是不是有这个属性,如果有,那么这会使用这个属性,如果没有,就会去在对象对应类的原型对象上去找,正因为这样,楼主这个程序最终会执行alert(123),如果你再创建一个对象ok2,调用ok2.f1()的话,这回会执行alert(321)简单的话,你可以把propotype对象理解成java里的静态属性,所有对象共用这个属性,但这还不够,就像java里可以重写方法一样,你还可以为对象添加属性去重写原型对象的属性,但这种重写只对当前对象有效。