高级js复习总结(一)

面向对象编程

面向过程编程

众所周知,编程有两大编程思想:面向过程和面向对象。
面向过程编程:POP (Process-oriented programming)

  1. 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的一次调用就可以。
  2. 通俗的理解就是,拿狗吃屎举例,面向过程就是吃(狗,屎),强调的是吃这个动作。
  3. 优点:性能比面向对象高,适合跟硬件联系很紧密的东西。例如单片机
  4. 缺点:没有面向对象易维护、易复用、易扩展

面向对象编程

“万物皆都对象”
面向对象编程:OOP(Object Oriented programming)

  1. 面向对象是把事务分解成一个个对象,然后由对象之间分工和合作。
  2. 依旧拿狗吃屎举例,面向对象就是狗吃(屎),强调的是狗和屎是对象
  3. 面向对象编程具有灵活、代码可复用、容易维护和开发的优点、更适合多人合作的大型软件项目。
  4. 可以设计出低耦合的系统,使系统更加灵活

面向对象的三大特征

1.封装性
2. 继承性
3. 多态性

面向对象的思维特点

  1. 抽取(抽象)对象共用的属性和行为组织(封装)成一个类(模板)。
  2. 对象实例化,获取类的对象。

虽然说ES6开始有了类的概念,但是,这并不是说JS有了像Ruby、Java这些基于类的面向对象语言一样,有了全新的继承模型。ES6中的类,仅仅只是基于现有的原型继承的一种语法糖。

  1. 创建类
    类名记得大写
  2. 利用类创建一个对象,也就是实例化对象
  3. 类 constructor构造函数
    constructor()方法是 类的构造函数(默认方法),用于传递参数返回实例对象,通过new命令生成都西昂实例时,自动调用该方法,如果没有显示定义,类内部会给我们创建一个constructor()
    光说不练假把戏,上案例
//1.创建类
class Star{ 
	constructor(uanme,age){
		this.uname = uname;
		this.age = age;
	}
	//添加一个sing方法
	//(1)类里面所有函数不需要写funtion
	//(2)函数之间不需要逗号隔开
	sing(song){
		console.log(this.uname + song);//刘德华唱歌
	}
}
var ldh = new Star('刘德华',20)
ldh.sing('冰雨')

类的继承

字类可以继承父类的一些属性和方法,这里只说一种extends的继承方法,剩余5种继承方式,下篇见

说点继承的前言:

ES6新增的Class类给编程带了了极大的方便,也是说是函数的语法糖,语法作用域和原型链是javascript的核心思想,Class是基于原型链实现的,函数也是基于原型链实现的,这两者必然有一些共性,甚至使用 typeof 类标识符考察类到底是一个什么东西?控制台会告诉你这是一个function。然而,Class作为一个新特性,它有函数该有的东西,它也有函数没有的东西,这是它强大的地方。
上案例讲解

class Father {
        constructor(x,y) {
            this.x = x ;
            this.y = y;
        }
        sum(){
            console.log(this.x + this.y);
        }
    }
    //extends 继承
    class Son extends  Father{
        constructor(x,y) {
            super(x,y);   //调用父类的构造函数
        }
    }
    var son = new Son(1,1);
    var son1 = new Son(2,3);
    son.sum();//2
    son1.sum();//5

拿我们的案例讲解:

  1. Father是Son的父类。
  2. 即Son.__ proto__= Father.prototype,也就是说子函数的原型对象Son.prototype被链接在父函数的原型对象Father.prototype
  3. 但是父子函数本身是独立的,没有任何关系,它们是靠原型对象联系到一起的,也就是Class干的好事。
  4. 即子类自己的__proto__指向了父类
  5. 简单理解:extends关键字将类和类原型链接到了两根不同的链

在这里我们能看见Father返回的是一个函数,类的作用域比函数多出了一个Script

多出的一根链

在这里插入图片描述

super关键字

super关键字调用父类函数
老规矩案例讲解

 class Father {
        say() {
            return "我是爸爸";
        }
    }

    class Son extends Father{
        say() {
            console.log(super.say()+"的儿子");
            //super.say()就是调用父类中的普通函数
        }
    }
    var son = new Son();
    son.say();    
    //输出:我是爸爸的儿子

继承中属性和方法的查找方法:就近原则

  1. 在继承中,如果实例化子类输出一个方法,先看子类有没有这个方法,如果有就先执行子类。
  2. 如果子类没有,就去查找父类有没有这个方法,如果有就执行父类的方法(就近原则)

字类继承父类同时扩展自己的方法

 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,必须放到this前面
            //(必须先调用父类的构造方法,在使用子类的构造方法)
            super(x, y);
            this.x = x;
            this.y = y;
        }

        subtract() {
            console.log(this.x - this.y);
        }
    }

    var son = new Son(5, 3);
    son.subtract();
    son.sum();

猜你喜欢

转载自blog.csdn.net/qq_45814762/article/details/106578364
今日推荐