浅识js——面向对象

43 阅读2分钟

js基础知识——面向对象

一、面向对象是什么?

  • 他并不是一个语法, 也并不是一个新的语言, 他是用 JS 完成需求 的一种思想

二、创建对象的方式

  • 需要能够方便我们批量创建对象

1.字面量的方式

    //这个方式不合适, 不利于批量创建
    let obj = {
            name: 'QF001',
            age: 18
        }

2.内置构造函数

    //这个方式不合适, 不利于批量创建
    let obj = new Object()

3.工厂函数

    function createObj(num) {
            // 3.1 手动创建一个对象
            const obj = {}

            // 3.2 手动给对象上添加一些属性
            obj.name = 'QF001'  // 添加一个 固定的字符串, 每次创建对象他的属性都是 ''QF001
            obj.age = num       // 利用形参给对象的属性赋值一个 '变量', 这样每次创建对象时都可以修改这个属性的值

            // 3.3 手动给对象返回
            return obj
        }

            let obj1 = createObj(18)
            let obj2 = createObj(66)
            console.log(obj1)
            console.log(obj2)

4.自定义构造函数的方式

  • 什么是构造函数?
    • 本质上就是一个普通函数, 如果再调用的时候, 前边加上一个关键字 new, 那么我们把这种函数叫做 构造函数。
     function Person (name,age){
      // 因为构造函数自动创建出来的的对象可以通过this来访问,所以 当需要向这个对象添加属性时,可以通过this添加
      this.age = age
      this.name = name
      this.a = '固定属性内容'
    }
    const p1 = new Person(20,'jack')
    const p2 = new Person(100,'als')
    console.log(p1)
    console.log(p2)
  • 构造函数有什么注意点?
    1. 构造函数的函数名首字母 大写 (建议, 非强制), 目的就是为了和普通函数做一个区分
    2. 构造函数内 不要写 return
      • 如果 return 的是一个 基本数据类型, 写了也没用
      • 如果 return 的是一个 引用数据类型, 写了就会导致构造函数没用
    3. 构造函数调用时, 必须和 new 关键字连用
      • 如果不连用, 也能调用, 但是构造函数就没用了
    4. 构造函数内部的 this
      • 当一个函数 和 new 关键字连用的时候, 那么我们说这个函数是 构造函数,然后这个函数内部的 this 指向本次调用被自动创建出来的那个对象
    5. 构造函数不能使用 箭头函数
      • 因为箭头函数内部没有 this
  • 构造函数的缺点?
    • 构造函数内部 如果有这个引用数据类型, 比如函数
    • 在多次调用构造函数时, 每一次都会重新创建一个函数, 必然会造成这个内存空间的浪费
  • js 内的数据结构类
    • 在 JS 中, 任何一个数组, 他的构造函数都是 Array
    • 在 JS 中, 任何一个对象, 他的构造函数都是 Object