js可否自定义类

js中没有类的说法,但可以使用函数来模拟类。

一个函数就可以是一个类:
function Person(){
}
存在以上函数后,你就可以使用var p = new Person();来构造一个Person的实例。而类是有属性和方法的,js则通过this来实现了属性和方法的添加。
function Person(){
        this.name = "myName";

        this.age = 20;

        this.eat = function(food){
                alert("eat:"+food);

        }

}
这样的定义使Person构造出来的对象都具有一些属性和方法了。例如之前声明的p,此时就有p.name = "myName"和p.age = 20,同时,p.eat("egg")则会弹出对话框“eat:egg”。这不就是一个类的实现吗?

所有的类都是继承自Object的,但var a = new Object(),a则是Object的一个实例,而不是一个新的类。就像前面的p一样,难道你还可以使用var b = new p()?显然是不行的。

那么js是怎么实现继承的呢?说起来js中类的实现和继承都有很多种方法,一时我也想不出。就举一个最简单的吧。

假设前面定义了那个Person类,现在要让一个Student类继承它,怎么做?
function Student(){
}
Student.prototype = new Person();
如上代码就实现了js中的继承关系,假如此时声明一个Student的对象:
var s = new Student();
alert(s.name);//弹出“myName”
s.eat("egg");//弹出“eat:egg”

在新定义的类中,你可以重写所有的属性和方法,比如
function Student(){
        this.eat = function(food){
                alert("learn first!");
        }

}
之前的eat调用会弹出eat:food,此时再次调用eat,则会报出learn first!,说明方法已经被重写了。在Student中,你还可以定义新的方法,新定义的方法,Person的对象都不具有。



给你推荐一个本书《javascript高级程序设计》,李松峰和曹力翻译的,挺好的,也挺入门的。才50多块钱,想想50多块钱就能掌握一门技术,值得!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值