JS高级-面向对象编程

216 阅读3分钟

Swtich-case分支结构

使用场景:等值判断,意味着如果需要判断范围,switch不合适

注意是全等于 值和类型都等于才会满足条件

switch (v) {
                case '红烧肉':
                    document.querySelector('span').innerHTML = '好吃'
                    break
                case '辣椒炒肉':
                    document.querySelector('span').innerHTML = '挺好吃'
                    break
                case '水煮肉片':
                    document.querySelector('span').innerHTML = '真香'
                    break
                case '回锅肉':
                    document.querySelector('span').innerHTML = '下饭'
                    break
                default:
                    document.querySelector('span').innerHTML = '还有好吃的?'
                    break
            }

三元表达式

语法: 表达式 ? 操作1 : 操作2

使用场景:根据条件获取值,或者根据条件执行某个操作 后期较为常用

while循环和do-while循环

区别 while是先判断后执行 do-while先执行一次再判断是否需要循环

其他循环

forEach:单纯的循环操作
      // 可以遍历整个数组,每次将数组的元素值和对应的索引传递给回调函数的value,index属性
      // 语法: 数组.forEach(function(value,index){处理})
map:可以遍历整个数组,执行传入的回调函数,并将回调函数的返回值存储到新数组中,最终将新数组返回
filter:执行传入的回调函数,将回调函数执行结果为true的数据留下来,最终将数据返回

冒泡排序

外层循环控制比较多少轮 内层循环控制每轮比较多少次

由于每轮循环都会找到一个最大值,意味着后面的循环的次数可以减少

let arr = [12, 3, 4345, 123, 2, 234, 3, 54, 5, 67, 5, 8] // 5
      // 需求:将数组的值从小到大排序
      // 添加一个循环控制比较几轮
      for (let i = 0; i < arr.length - 1; i++) {
        // i = 0
        for (let j = 0; j < arr.length - 1 - i; j++) {
          if (arr[j] > arr[j + 1]) {
            let temp = arr[j]
            arr[j] = arr[j + 1]
            arr[j + 1] = temp
          }
        }
        // console.log(arr)
      }

面向对象

找到能够实现功能的对象,调用它的成员实现相应的操作

有对象就调用,没有就自己封装

简单类型和复杂类型

  • 简单类型:值类型:字符串,数值,bool值
  • 引用类型:对象,数组,函数
  • 特点:如果值类型数据做为参数,那么函数中进行操作操作不会影响原始数据
  • 如果引用类型做为参数,会造成实参和形参指向相同的地址空间,函数中的操作会影响原始数据

创建对象的几种方式

语法糖

let arr = {}

构造函数

  • 它是一个函数,可以接收参数
  • 它的定义,要求首字母大写
  • 不要以普通函数的方式调用构造函数,它会失去构造函数的功能
  • 以new 调用构造函数

new做了什么

  • 创建对象,开辟空间
  • 将创建的对象的地址赋值给this
  • 为this添加成员并赋值
  • 将this的地址返回

缺点

造成内存的浪费 因为现在的代码是每个对象都有一块空间存储方法

解决:将方法提取到全局 将方法添加到原型 但是会造成全局污染