JS类的封装及实现

本文介绍了如何在JavaScript中实现类及其方法,包括实例方法、静态方法、抽象类的概念,并详细解释了如何通过闭包、原型链实现类的继承。通过实例展示了类的创建、方法的定义与调用,以及如何在子类中重写和实现虚方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1. 定义js类
 
 js并不是一种面向对向的语言, 没有提供对类的支持, 因此我们不能像在传统的语言里那样 用class来定义类,  但我们可以利用js的闭包封装机制来实现js类, 我们来封装一个简的Shape类.

 

这个类里定义了两个方法:show和init, 需要注意的是这里用到了this来声明, 而不是var, 因为用var是用来定义私有方法的.
另外, 我们还可以用prototype属性来定义Shape的方法.

 上面这种写法看起来不太直观,我们可以将所有的方法写在一起.

现在, 类是写好了, 让我们写个js来测试下, 看看结果是不是跟我们想象的一样呢?

看到了吧, 其调用方式和C#一模一样, 而结果也如我们所料.

到目前为止, 我们学会了如何创建js的类了, 但还只是实例方法,要是实现跟C#中的静态方法要怎么做呢?
其实, 实现js的静态方法很简单, 看下面如何实现:

 

2. 实现JS类抽象和继承


同样, js中也不支持类继承机制,但我们可以通过将父类prototype中的成员方法复制到子类的prototype中来实现.
和类的继承一样,JavaScript也没有任何机制用于支持抽象类.但利用JavaScript语言本身的性质.可以实现自己的抽象类.
首先来看看js中的虚方法, 在传统语言中虚方法是要先定义的, 而包含虚方法的类就是抽象类,不能被实例化,而在JavaScript中,虚方法就可以看作该类中没有定义的方法,但已经通过this指针使用了.
和传统面向对象不同的是,这里虚方法不需经过声明,而直接使用了, 并且类也可以被实例化.
 
先定义object的extend方法, 一个为静态方法,一个为实例方法, 这两个方法用于实现继承的prototype复制

 

接下来我们实现一个继承类Rect, 这里先用一种简单的方法来实现。

这种方法不能用于重写,如果改变了show方法, ShapeBase的show也会指向同一函数可能是由于prototype赋值只是简单的改变指向地址.

如果上面也定义了:

Rect.prototype.show=function() {
        alert("Rect show");
    }

那么执行结果如下:

    function test(){
       var s=new ShapeBase();
        s.show();          //结果:Rect show
       
        var r=new Rect();
        r.show();         //结果:Rect show
        r.add();
    }

 

我们再使用object.extend实现继承, 并实现一个oninit虚方法, 修改ShapeBase如下:

实现Rect类继承.

现在我们的类写好了, 测试下看看:

 

另外,在http://www.bgscript.com 网上看到一篇用专门的对象来创建类,代码如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值