JavaScript高级编程
JavaScript是一门面向对象又是面向过程的解释性编程语言。
定义
面向对象
面向对象:把事物分解成为一个个对象,然后由对象之间分工合作。
面向过程
定义:就是分析解决问题所需要的步骤,用函数一一实现,实现的时候,可以直接调用。
面向对象的特性
封装性,继承性,多态性
面向对象和面向过程的区别
面向对象:
优点:易维护,易复用
缺点:性能比面向过程低
面向过程:
优点:性能比面向对象高
缺点:没有面向对象易维护,易复用
类和对象
类
用class声明的,就是类。抽取(抽象)对象共有属性和行为(分装成一个类(模板)。(注意类不用加小括号## 标题)
class 类名{
//对象共有属性
}
所有类里面都有一个constructor构造函数(在类里面,函数不要写关键字function),且如果的没有声明cinstructor这个构造函数,则它会自动生成。
class 类名{
constructor(x,y){
this.x=x;
this.y=y;
}
}
constructor这个函数可以接受传递过来的参数,同时返回实例化对象,只要new 生成实例的时候,这个函数自动调用这个函数。
对象
对象是一个具体的事物。对类进行实例化对象,获取类的对象。
如何在类中添加方法(函数)
类中的函数不需要添加关键字function
class 类名{
sing(){
console.log("我喜欢唱歌");
}
}
类的继承
关键字: extends
super关键字:用于访问和调用对象父类的函数,可以强调父类的构造函数,可以调用父类的普通方法(函数)。
!注意:当我们想子类的私有化方法调用和父类的方法同时的调用的时候,可以先把构造函数constructor中选将父类的构造函数的值获取过来,在对自己的值进行确定
错误实例:
<script>
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) {
this.x = x;
this.y = y;
}
}
var arr = new Son();
arr.sum();
</script>
正确做法:
<script>
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);
this.x = x;
this.y = y;
}
}
var arr = new Son(1,2);
arr.sum();
</script>
this指向问题
在constructor构造函数中的this指向的是实例化对象
其他的this谁调用的,this指向水。
在es6中类没有变量提升,所以必须先定义类,才能通过实例化对象。