javascript定义类

来源:互联网 发布:软件测试 教学大纲 编辑:程序博客网 时间:2024/05/16 17:56
 

javascript定义类

作者:sagahu@163.com
日期:2011-12-26
javascript中类是通过function实现的,类的对象是通过new那个function来获得。这里面包含一些细节值得探讨。

一、声明并创建单实例对象

首先需要注意的是,对于单实例对象不是通过function来实现,而是通过枚举来实现的。举个例子如下:

代码(可以建个空HTML文件,把这段代码粘帖到脚本的<Script>标签对里来测试):
            var obj1 = {        Name : "zhangsan",        Age : 28,        SayHello : function() { alert("Hello "+this.Name); }    };        obj1.SayHello();                
注意:这里仅是声明并创建了一个单实例对象obj1;不是类,所以没有机会new。

二、类的构造函数

声明类的构造函数可以有以下两种写法,下面以“人”类的定义为示例:
  • function Human() {} 或者:
  • var Human = function() {}
接下类声明一个包含属性与方法的Human类,代码如下:
         function Human(name, age) {        this.name = name;   // 成员属性如此定义        this.age = age;                // 第一种声明方法的办法:在类的内部直接声明        this.methodA = function() {             alert("Hello " + this.name);        }    }        // 第二种声明方法的办法:在类的外部通过“类.prototype.方法名 = function(){}”来定义    Human.prototype.methodB = function() { alert("Hello " + this.name); }        var obj1 = new Human("张三", 18);    obj1.methodA();    obj1.methodB();         var obj2 = new Human();    obj2.methodA();    obj2.methodB();              
第二种声明方法的办法可以做到在不修改前面那部分类声明代码,而为类添加新的方法。这种办法灵活性很强,实际工作中应用较多,例如经常可以看到通过这种方法为javascript的内置对象String扩展trim()方法:String.prototype.trim()=function(){...}

三、为对象动态添加属性

看这段代码:
        function Human(name, age) {        this.name = name;   // 成员属性如此定义        this.age = age;    }        var obj1 = new Human("张三", 18); // 上面类声明中并没有这个属性        obj1.sex = "男";    alert(obj1.sex);        
上面类声明中并没有sex这个属性,但是给它赋值、调用都成功了。这说明:在运行中可以给类动态增加实例属性。 其实,javascript关于此功能的语法是:(1)如果有这个属性,则是修改属性值;(2)如果没有这个属性,则是添加这个属性并且赋值。

四、类的静态属性与静态方法

为javascript类添加静态成员与上面动态为类添加实例属性的方法有些类似,不同之处就是:(1)上面通过对象名添加的属性是实例属性;(2)如果通过类名来添加则会成为静态成员。看示例代码:
        function Human(name, age) {        this.name = name;   // 成员属性如此定义        this.age = age;    }        Human.count = 100; // 静态属性    Human.staticMethod = function() { alert("Hello " + Human.count); } // 静态方法        Human.staticMethod(); // 调用静态方法            var obj1 = new Human("张三", 18);    obj1.staticMethod(); // 静态方法不能通过对象来调用,本行代码会报错!        
原创粉丝点击