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来进行判断,根据参数的多少来调用相对应的方法。