Javascript OO学习

Javascript中类的建立方法及功能扩展、继承。

1.类建立,由于Javascript没有Class之类关键字,所以类的建立以function为关键字
 function Person() //Person类的建立(结构)
 {
  //属性
  this.Name;
  this.Age = 20; //默认为20
  
  //方法
  this.SetTel = function()
  {
   //do sth...
   alert("设置电话号码");
  }
 }
 Person.Run = function(){} //静态方法
 Person.Height = 180;  //静态属性
 加入prototype则为实例方法(属性),否则为静态。

2.prototype属性,功能扩展(不限于用户类,可以扩展系统类)
 此方法对上述类进行功能扩充,增加一新的方法eat。
 Person.prototype.eaT = funtion() //方法扩展
 {
  alert("吃饭");
 }
 Person.prototype.Phone = "135";  //属性扩展
 
 var p = new Person();
 p.eaT();  //吃饭
 
 使用prototype扩展的方法和属性可以直接用类名进行调用:
 Person.prototype.Phone;
 Person.Prototype.eaT();
 不用prototype扩展的方法则为静态方法(相当于static):
 Person.Run();
 Person.Height;
 
3.继承。
 Javascript中可通过prototype进行类的继承。
 function PersonA()
 {
  this.Job = function() //职业
  {
  }
 }
 
 PersonA.prototype = new Person(); //继承
 
 var pa = new PersonA();
 此时对pa可以调用Job,SetTel,eaT等方法,继承Person类的方法名。 
 
 对象的创建方法。
 var obj = {}; //创建一空对象。var obj = new object();
 var obj = {Name:"test",Age:25}; //创建一带参数的对象。可以理解为实体
 function Entity(name, age)
 {
  this.Name;
  this.Age;  
 }
 var e = new Entity(name, age);
 
4.方法重载。
 javascript中不支持方法同名的Method存在,如果存在则最后一个Method会覆盖前面的。
 下面模拟重载实现。
 4.1.此方法在function内部无法访问类的成员
 function TestClass()
 {
  //创建一个数组methods来存放所有重载的方法实现(但此方法在function内部无法访问类的成员)
  var methods = new Array(
     function(){alert(0);},
     function(arg0){alert(arg0);},
     function(arg0, arg1){alert(arg0);}
      );
  调用show方法来实现重载的调用
  this.show = function()
  {
   return methods[arguments.length].apply(null, arguments);
  }
    }
   
    var T = new TestClass();
    T.show();   //0
    T.show("a");  //a
    T.show(123,"ab"); //123
   
    4.2利用arguments来进行判断,根据参数的多少来调用相对应的方法。
   
   

posted on 2008-10-06 20:41  Kaven.lau  阅读(195)  评论(0编辑  收藏  举报

导航