People类使用了两种方法扩充People.Run和People.prototype.IntroduceChinese,请问这两种方法有什么不同?
各有什么优缺点
function People(name)
{
    this.name=name;
    //对象方法
    this.Introduce=function(){
        alert("My name is "+this.name);
    }
}//类方法
People.Run=function(){
    alert("I can run");
}
//原型方法
People.prototype.IntroduceChinese=function(){
    alert("我的名字是"+this.name);
}//测试
var p1=new People("Windking");
p1.Introduce();
People.Run();
p1.IntroduceChinese();

解决方案 »

  1.   

    prototype对象是实现面向对象的一个重要机制。
    每个函数就是一个对象(Function),函数对象都有一个子对象 prototype对象,类是以函数的形式来定义的。prototype表示该函数的原型,也表示一个类的成员的集合。
    在通过new创建一个类的实例对象的时候,prototype对象的成员都成为实例化对象的成员。
    1、该对象被类所引用,只有函数对象才可引用;
    2、在new实例化后,其成员被实例化,实例对象方可调用。
    同时,函数是一个对象,函数对象若直接声明成员,不用被实例化即可调用。 其实总结下意思就是加了prototype的对象是不会被实例化的,是一个静态的方法
    不加prototype每次new类的时候都会被实例化.占内存了.关键就是占内存了...
      

  2.   

    //类方法
    People.Run=function(){
      alert("I can run");
    }
     
    这种方法也没有实例化,与People.prototype.IntroduceChinese有区别吗?
      

  3.   

    LZ自己也可以做个测试比较People.prototype.IntroduceChinese();与p1.IntroduceChinese();的区别,不管People有没有被实例化,都可以调用People.prototype.IntroduceChinese();但不同的是
    People.prototype.IntroduceChinese()由于People没有被实例化,所以this.name为undefined,
      

  4.   

    People.Run=function(){
      alert("I can run");
    }这个两种理解:
    1,由于JS的弱类型,People也可以看做一个对象,这句给对象People添加了方法Fun
    2,等效理解,给People类添加了静态方法Run