首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

请教通过类方法的原型号方法扩充函数有什么不同

2012-04-11 
请问通过类方法的原型号方法扩充函数有什么不同?People类使用了两种方法扩充People.Run和People.prototype

请问通过类方法的原型号方法扩充函数有什么不同?
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();


[解决办法]
prototype对象是实现面向对象的一个重要机制。
每个函数就是一个对象(Function),函数对象都有一个子对象 prototype对象,类是以函数的形式来定义的。prototype表示该函数的原型,也表示一个类的成员的集合。
在通过new创建一个类的实例对象的时候,prototype对象的成员都成为实例化对象的成员。
1、该对象被类所引用,只有函数对象才可引用;
2、在new实例化后,其成员被实例化,实例对象方可调用。
同时,函数是一个对象,函数对象若直接声明成员,不用被实例化即可调用。 

其实总结下意思就是加了prototype的对象是不会被实例化的,是一个静态的方法
不加prototype每次new类的时候都会被实例化.占内存了.关键就是占内存了...
[解决办法]

探讨

//类方法
People.Run=function(){
alert("I can run");
}

这种方法也没有实例化,与People.prototype.IntroduceChinese有区别吗?

[解决办法]
People.Run=function(){
alert("I can run");
}

这个两种理解:
1,由于JS的弱类型,People也可以看做一个对象,这句给对象People添加了方法Fun
2,等效理解,给People类添加了静态方法Run

热点排行