JavaScript面向对象,class关键字,继承,super关键字

目录

面向对象概述

面向过程

面向对象

ES6面向对象语法 

类和对象

类的基本语法

class关键字

继承

方法覆盖

super关键字

静态成员和实例成员


面向对象概述

面向过程

面向过程:面向过程就是分析出解决问题的步骤,然后用函数把这些步骤一个个实现,使用的时候一次调用。面向过程的核心是过程

面向对象

面向对象:面向对象就是把需要解决的问题分解成一个个对象,建立对象 不是为了实现一个步骤,而是为了描述每个对象在解决问题中的行为,面向对象的核心是对象

优势:模块化更深,封装性强

           更容易实现复杂的业务逻辑。

           更易维护、易复用、易扩展。

特征:

封装性:封装性包括属性的封装,方法的封装,类的封装,组件的封装

多态性:多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

继承性:继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。

              在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承

              在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承

面向对象的特性可以用下图解释:

ES6面向对象语法 

ES6, 全称 ECMAScript 6.0

类和对象

:事物分为具体的事物和抽象的事物,当我们脑中出现“书”这个词的时候,就可以大致想象到书的基本样貌特征,这个过程就是抽象,抽象出来的结果,就是类。

可以用class关键字声明一个类(字母大写),之后以这个类来实例化对象。

对象:当我们拿起手里的一本真实存在的书的时候,这本书有自己的书名、作者、页数等信息,像这种具体的事物就是对象。

类和对象的区别:

1) 类抽象了对象的公共部分,它泛指某一大类(class)

2) 对象特指某一个,通过类实例化一个具体的对象 

3) 类必须使用new实例化对象

4) 创建类和创建对象的方法不同:

创建类:class Name { }

创建对象:var xx = new Name()

类的基本语法

class关键字

用来定义一个类,在类中可以定义constructor()构造方法,用来初始化对象的成员。

//定义类
class Person{
   constructor(name){
      this.name = name;
   }
}
//使用类创建对象
var p1 = new Person('张三')	//创建p1对象
var p2 = new Person('李四')	//创建p2对象
console.log(p1.name);       //访问p1对象的name属性
console.log(p2.name);       //访问p2对象的name属性

//输出:张三  李四

 类中的方法

class Person{
   constructor(name) {this.name = name;}
   say(){	    // 在类中定义一个say()方法
      console.log('你好,我叫' + this.name)
   }
}
var p1 = new Person('张三')
p1.say()	  // 输出结果:你好,我叫张三

继承

在JavaScript中,继承用来表示两个类之间的关系,子类可以继承父类的一些属性和方法,在继承以后还可以增加自己独有的属性和方法。

// 先创建一个父类(基类或超类)
class Father{
   constructor() {}
   money(){
      console.log(100)
   }
}
// 子类继承父类,Son是子类(又称为派生类)
class Son extends Father {}
//创建子类对象
var son = new Son()
son.money()
//输出结果:100

方法覆盖

 若子类中定义的函数与父类中的函数同名时,父类的函数就覆盖了父类中函数。

super关键字

super关键字用于访问和调用对象在父类上的方法,可以调用父类的构造方法,也可以调用父类的普通方法。(代表当前类的父类)

注意:A、调用父类的构造函数:在子类的构造函数中使用super调用父类的构造函数,则调用语句必须作为子类构造函数的第一条语句       super([参数])
           B、子类不能继承父类的构造函数
           C、调用普通函数:  super.函数名([参数])

例子:通过super关键字调用对象在父类上的构造方法

class Father{   //定义父类
    constructor(x, y){   //constructor构造方法
       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()       //输出结果:3

例子:通过super关键字调用父类的普通方法

class Father{
    say(){
       return '我是父类'
    }
}
class Son extends Father{
    say(){
       console.log(super.say() + '的子类')   //super调用父类的普通方法
    }
}
var son = new Son(1, 2)
son.say();       // 输出结果:我是父类的子类
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别Null.了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值