---

... 2025-7-10 路线 大约 4 分钟

# 变量作用域

  • 全局变量 在任何地方都能访问 并且 持久保存
  • 局部变量 只能在当前作用域访问 在函数执行结束后 局部变量会被 浏览器 回收
  • 变量提升 是把变量的声明 提升到当前作用域的最前面
  • 作用域是在 定义的时候 确定的 并不是 调用的时候.
  • 函数的形参 相当于 函数的局部变量

# 闭包

  • 闭包指的是 定义在函数内部的函数 并且 被外部所引用
    • 优点 让局部变量 持久保存 防止污染
    • 用处 模拟全局变量 主要用于封装
  • 函数的形参是局部变量
  • 闭包 变量持久保存

# 字面量和构造函数

  • var res = "123" //字面量写法
  • var res1 = new String("123") //构造函数写法
  • 构造函数 首字符大写
function P(name, age) {
  this.name = name
  this.age = age
}
1
2
3
4
  • var obj = new P("name", "25") 生成构造函数的 实例对象

# this

  • 事件处理函数 内部 this 指向 绑定该事件的 DOM 对象
  • 构造函数内部 this 指向 该构造函数的实例对象
  • 对象内部的 this 指向 该对象本身
  • 除上述情况之外 this 指向 window
  • 在没有改变 this 指向的前提下 函数的 this 谁调用指向谁

改变 this

  • call apply 是在调用的时候 改变的 this 指向
  • bind 是在 定义的时候 改变的 this 指向 并返回一个 新函数
  • call apply 他们俩的区别是
  • 参数区别 call 的参数是展开的 apply 的参数 是在 一个 数组内部

# 面向对象

  • 面向对象 是一种编程思想 主要用于 封装

  • 一般有三种模式

    • 工厂模式
    • 构造函数模式
    • 原型对象模式
  • 开发的过程中 最常用是 构造函数 结合原型对象模式

  • 将私有的属性放到 构造函数 内部 公共属性定义到 构造函数的 原型对象上面

  • 定义在构造函数 原型对象上面的 属性还有 方法 会被 实例对象 所继承

# 构造函数

// es5

function Person(name, age) {
  this.name = name
  this.age = age
  this.type = '人'
}

// Person("name", 65)//内部 this指向 window  相当于 往window 对象上 定义了  name age type
console.log(window)

var p = new Person('name', 67) //生成实例对象
console.log(p)

// 每一个实例对象 都有一个 constructor 属性 指向它的 构造函数 .name 指 该实例对象指向构造函数的 名字
console.log(p.constructor.name)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// es6
class Person {
  constructor(name, age) {
    this.name = name
    this.age = age
  }
  say() {
    console.log(this.name)
  }
}

var p = new Person('name', 20)
p.say()
1
2
3
4
5
6
7
8
9
10
11
12
13

# 原型对象

  • 在 js 中 万物皆对象 每当定义一个对象的时候 对象中都会包含一些 预先定义好的属性 其中 函数对象 的一个属性 就是 原型对象 prototype 普通对象 没有该属性
  • 但是 普通对象 会有 __proto__ 属性
  • 每个函数对象 都有一个 prototype 属性 指向其 原型对象
  • 原型对象上面的方法 会被 实例对象 所继承
  • 原型对象内部的 this 指向 构造函数本身
  • 所有对象都有 原型链 指向其 构造函数的 原型对象

# 原型链

  • 主要用于 继承
  • 每一个对象 不管是 函数对象还是 普通对象 都会有 __proto__属性 指向它 构造函数的原型对象
  • 每当访问对象的 属性的时候 首先会在该对象 内部 进行查找 如果没有找到 就会沿着 __proto__
  • 向上一层 接着查找 一直找到 null 为止
  • 函数的原型链 指向其构造函数 Function 的原型对象
  • 实例对象 它的原型链 本身指向 构造函数 Person 的 原型对象

# new

  • 创建一个 空对象
  • 将空对象的 原型链 指向 构造函数的 原型对象
  • 将构造函数内部的属性 定义到 空对象上
  • 把 构造函数内部的 this 指向 改变成 新对象

# 对象合并

  • assign 主要用于 合并独享 只能深拷贝 单层属性
  • 如果 对象内 有属性时 引用类型 则仍存在 引用关系
  • 把后面的对象 合并到 第一个 参数的 对象中去
上次编辑于: 2025年7月10日 04:01
贡献者: HugStars