JavaScript中创建类及类的继承
JavaScript 是面向对象的语言,引用数据类型都是对象,包括函数也是对象,同时还可以通过 Object 对象自定义对象。
但是,和其他面向对象语言(如 Java 等高级语言)比,也有很大差异,JS 中没有类或接口的概念,即不能直接定义抽象的类,也不能直接实现继承。不过,为了编程的方便,我们可以在 JS 中模拟类和继承的行为
简单来说就是Javascript中没有类的概念,不过它可以用构造函数来实现类的功能,构造函数就是一个函数,一般构造函数名首字母大写
实际上,类是“特殊的函数”,就像你能够定义的函数表达式和函数声明一样,有两个创建类的方法:
- 方法1:类声明
class Star {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
- 方法2:类表达式
var Star = class {
constructor(name, age) {
this.uname = name;
this.age = age;
}
}
console.log(Star.name); //Star
在这里注意:函数声明和类声明之间的一个重要区别在于, 函数声明会提升,类声明不会。你首先需要声明你的类,然后再访问它,否则类似以下的代码将抛出ReferenceError
var p = new Star(); // ReferenceError
class Star {
constructor(name, age) {
this.uname = name;
this.age = age;
}
} //要先声明类,才能使用它
类必须使用new关键词来进行实例化
var ldh = new Star("刘德华", 55);
var zxy = new Star("张学友", 25);
console.log(ldh.name, ldh.age); //刘德华,55
console.log(zxy.uname, zxy.age); //张学友, 55
- 类的继承
//语法
class Father{
}
class Son extends Father{
//子类继承父类
}
class Father {
constructor() {
}
money() {
console.log(100);
} //给类中添加了方法
}
class Son extends Father {
}
var son = new Son();
son.money(); //100(继承了父亲的100元)
class Father {
constructor(x, y) {
this.x = x;
this.y = y;
}
sum() {
console.log(this.x + this.y);
}
}
class Son extends Father {
constructor(x, y) {
super(x, y);
//super关键字用于访问和调用对象父类上的函数,可以调用父类的构造函数,也可以调用父类的普通函数
}
}
var son = new Son(1, 2);
son.sum();