JavaScript-面向对象

128 阅读3分钟

一、对象类型的使用

  • 认识对象类型
    • 对象类型是一种存储键值对的更复杂的数据类型
    • 键值对可以是属性和方法 函数(function):如果JavaScript代码中通过function默认定义一个结构,称之为函数 方法(method):如果将一个函数放到对象中,作为对象的一个属性,那么将这个函数称之为方法
    • key可以是字符串
    • value可以是任意类型,包括基本数据类型、函数类型、对象类型
  • 创建对象
    • 对象字面量:通过{}
    • new Object+动态添加属性
    • new其他类
  • 使用对象
    • 访问、修改、添加、删除(delete)
    • key值若为变量可以使用[]方括号使其在定义和操作属性时更灵活
  • 对象的遍历
    • Object.keys()方法会返回一个由一个给定对象的自身可枚举属性组成的数组
    • 遍历方式一:普通for循环
    var infoKeys = Object.keys(info)
    for (var i = 0; i < infoKeys.length; i++) {
        var key = infoKeys[i]
        var value = info[key]
        console.log(`key:${key},value:${value}`)
    }
    
    • 遍历方式二:for in遍历方法
    for (var key in info) {
        var value = info[key]
        console.log(`key:${key},value:${value}`)
    }
    

二、值类型和引用类型

  • 堆内存和栈内存

    • 原始类型占据的空间是在栈内存中分配的
    • 对象类型占据的空间是在堆内存中分配的
  • 值类型和引用类型

    • 原始类型在变量中保存的是值本身,所以也叫值类型
    • 对象类型在变量中保存的是对象的“引用”,所以也称之为引用类型

    22_JS内存分配.png

三、函数的this指向

  • 如果普通的函数被默认调用,那么this指向的就是window
  • 如果函数它是被某一个对象来引用并且调用它,那么this会指向这个对象

四、工厂方法创建对象

  • 创建对象的方式:工厂函数(封装一个函数用于创建一个对象,我们只需重复调用这个函数即可)
    function createPerson(name, age, height, address) {
      var p = new Object()
      p.name = name
      p.age = age
      p.height = height
      p.running = function() {
        console.log(this.name + "running~")
      }
    }
    var p1 = createPerson("张三", 18, 1.88, "杭州")
    var p2 = createPerson("李四", 18, 1.88, "宁波")
    var p3 = createPerson("王武", 18, 1.88, "温州")
    

五、构造函数和类

  • 认识构造函数
    • 构造函数也称之为构造器,通常是我们在创建对象时会调用的函数
    • 在JavaScript中,构造函数就是类的扮演者
    • 在ES5之前,我们都是通过function来声明一个构造函数(类)的,之后通过new关键字来对其进行调用
    • 在ES6之后,JavaScript可以像别的语言一样,通过class来声明一个类
    • JavaScript中类的表示形式就是构造函数
    • 构造函数也是一个普通的函数,如果这个普通函数被new操作符来调用了,那么这个函数就称之为构造函数

六、new创建对象

  • 如果一个函数被使用new操作符调用了,那么它会执行如下操作
    • 在内存中创建一个新的对象(空对象)
    • 这个对象内部的[[prototype]]属性会被赋值给该构造函数的prototype
    • 构造函数内部的this,会指向创建出来的新对象
    • 执行函数体代码
    • 如果构造函数没有返回空对象,则返回创建出来的新对象