js可否自定义类

来源:互联网 发布:网络平台招代理商协议 编辑:程序博客网 时间:2024/05/16 06:09
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多块钱就能掌握一门技术,值得!