javascript定义类

 

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(); // 静态方法不能通过对象来调用,本行代码会报错!    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值