JavaScript是一门解释性语言,但它也跟其他语言有相通的地方,比如类,js中的类与Java中的类的概念是一样的,只不过是js中的类貌似没有Java中的复杂(可能是我还没到达一定的深度)。对于我这种只是停留在了解不了解Java语言的人来说,还是有一定的基础的。哈哈哈哈哈哈。还是正事比较重要。
类的创建
还是先简单说下类和对象的概念吧。类是指具有相同的属性和方法抽象出来的一类事物,比如说车、衣服、书、数据库等,都可以看作是类。对象呢,是指一个具体的事物,通过类的实例化得到的,即对象也叫类的实例化。比如红色的车、我穿的一件上衣、我在看的这本书、正在使用的数据库,具体的事物就是对象。
类和对象说完了,咱就开始试试手,光说不练假把式啊,创建类实现才是真理。
创建类的语法
class name{ constructor(形参){ } 方法名([形参]){ } }
其中constructor是类的构造器也叫构造函数,constructor用来接受形参,然后返回实例对象。constructor在创建类时可以不写,系统也会自动生成对应得constructor函数的。
类创建完了,下一步就是生成对象了,new关键字。
来个明星类吧。再实例化对象
class Star {
// 构造函数里面的参数是用来接受实例的参数,可以理解为是实例对象的属性
constructor(sname, sage) {
this.sname = sname;
this.sage = sage;
}
// 方法
say(work) {
console.log(this.sname + "出演" + work);
}
}
// new 关键字出现 会自动调用construct函数
var lyf = new Star('李易峰');
lyf.say("古剑奇谭");
console.log(lyf);
你看你看结果
上面是一个简单的例子,主要是体会一下类创建对象的过程。下一步,再来体会一下类的继承。
类的继承
继承就是子类继承父类的属性和方法,同时子类还可以有自己的属性和方法。继承就是一个关键字extends。下面就表示Son类继承Father类。继承后子类可以使用父类的属性方法。
class Son extends Father{}
举个栗子:父类有加法的方法,子类只需继承父类的加法方法,子类自己再扩展一个减法的方法。
class Father {
constructor(x, y) {
this.x = x;
this.y = y;
}
// 计算加法
sum() {
return this.x + this.y;
}
}
// 继承用extends关键字
// 子类继承父类 子类可以使用父类的属性和方法,同时子类还能自己扩展的属性和方法
class Son extends Father {
// 子类要想使用父类的构造函数 必须用super()
constructor(x, y) {
// 把参数传到父类的构造器的参数里
// 这里是把子类的两个参数传到父类的构造函数里了
super(x, y); // 必须要写在第一行 也就是子类的this之前
this.x = x;
this.y = y;
}
less() {
return this.x - this.y;
}
}
var father = new Father(2, 3);
var son = new Son(5, 8);
// 子类自己的方法
console.log(son.sum());
// 子类继承了父类的加法
console.log(son.less());
这样的实现跟Java中的继承思想是一毛一样的,就是用不同的语言实现的而已。
注意:super()方法,它是子类调用父类构造函数的方法,往里面传参数是调用父类的构造函数;同时super.方法名() 可以调用父类的普通函数的。emmmmm,我木有试。
一般的话我们都是用super()方法调用父类的构造函数。
类的创建和继承,目前暂时就这么多了,但是还有两点需要注意。
- 类是没有变量提升的,所以 必须先创建类,再能通过类去实例化对象,不能先实例化再去创建类。
- 类里面的共有属性和方法,必须要用this调用。在构造函数中,this指向实例化对象;在方法中,this指向方法的调用者