JS高级(一)面向过程与面向对象

JS高级(一)

一、面向过程与面向对象

1、面向过程

  • 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了。

2、面向对象

  • 面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。

3、面向过程与面向对象对比

面向对象:易于维护、拓展,耦合性低;适用场景:多人合作的复杂项目
面向过程:不易于维护、拓展,耦合性高;适用场景:简单的功能模块

二、对象和类

1、对象

对象是由属性和方法组成的:是一个无序键值对的集合,指的是一个具体的事物

  • 属性:事物的特征,在对象中用属性来表示(常用名词)
  • 方法:事物的行为,在对象中用方法来表示(常用动词)

2、创建对象

//字面量创建对象
var ldh = {
    name: '刘德华',
    age: 18
}
console.log(ldh);//{name:"刘德华",age:18}

//构造函数创建对象
  function Star(name, age) {
    this.name = name;
    this.age = age;
 }
var ldh = new Star('刘德华', 18)//实例化对象
console.log(ldh);	//Star{name:"刘德华",age:18}

3、类

类 (泛指一类事物):比如运动员,把公共的特征提取出来,封装在一个模板中(姓名,年龄,身高,特长…)

类抽象了对象的公共部分,它泛指某一大类(class)对象特指某一个,通过类实例化一个具体的对象

4、创建类

 // 1. 创建类 class  创建一个 明星类
 class Star {
   // 类的共有属性放到 constructor 里面
   constructor(name, age) {
   this.name = name;
   this.age = age;
   }
 }
   // 2. 利用类创建对象 new
   var ldh = new Star('刘德华', 18);
   console.log(ldh);//Star{name:"刘德华",age:18}

运行结果和使用构造函数方式一样

注意要点 :

  1. class 创建的类首字母还是要大写
  2. 类中的 constructor 构造函数, 接收 new 创建对象传递的参数,并返回实例对象(return this)
  3. new 一个类时,自动调用构造函数方法,但不会自动调用类方法
  4. 类中的构造函数 和 类方法不需要加 function (重点)
  5. 多个类方法之间不需要使用逗号隔开 (重点)

5、大括号总结

  • 函数体 fn () {}
  • 定义对象 var obj = {}
  • 条件语法 if () {}
  • 定义一个类 class 类名 {}

6、类的继承

  • 定义一个类(子类)通过 extends 继承父类上的方法和属性

​ class 子类名 extends 父类 {}

  • super 关键字可以访问和调用父类上的函数,包括构造函数和类方法
 class People {
            constructor(name, age, sex) {
                this.name = name;
                this.age = age;
                this.sex = sex;
            };
            buy(phone) {
                console.log(this.name + '买了部' + phone);
            };
            say() {
                console.log('hello');
            };
        };
        class Student extends People {
            constructor(name, age, sex) {
                // 构造函数中要想使用this, 必须调用super() 函数, 可以直接把参数传给父亲;
                super(name, age, sex);
            };
            // 子类方法
            say() {
                console.log('你好');
            };
            // 子类方法
            intro() {
                // super的第二个方法,可以直接去调用父类上的方法
                super.say(); //hello
                console.log('大家好,我是' + this.name);
            }
        };
        var xm = new Student('小明', 16, '男');
        console.log(xm);
        // 如果子类中有和父类中同名的方法,就近使用子类的方法
        xm.say(); //你好
        xm.intro();

注意:

​ (1)子类调用方法时的查找顺序:先从子类上找再从父类上找

​ (2)super 作为一个函数,可以调用父类的构造函数;作为一个对象,可以调用父类的方法

子类中注意的两点:

​ 1. 子类中使用 this 之前,必须要先调用 super

  1. 子类可以拓展自己的属性和方法

7、使用类的两个注意事项

​ 1. 声明 class 类不存在变量提升,先定义再使用

  1. 在类中访问属性和方法,必须加 this

8、JS基础this的常见指向问题;

  • 非函数作用域中的指向:始终指向window;
  • 函数作用域中的指向:函数的调用者(不关心函数的定义)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱对恨错

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

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

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

打赏作者

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

抵扣说明:

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

余额充值