「这是我参与2022首次更文挑战的第23天,活动详情查看:2022首次更文挑战」
this 关键字
- 函数中的this,指的就是函数的当前执行主体
- 在全局作用域下, this指向window;
- 函数体中的this,看函数执行前有没有”.” ; 如果有,那么点前面是谁,this就指向谁,如果没 有” . ” ; 那么会指向window;
- 如果给元素的事件行为绑定方法,那么方法中的this,就会指向当前被绑定的那个元素
- 回调函数中this指向window
- 自执行函数中的this一般都指向window
- forEach map 第二个参数可以修改this
- this是谁,和它在哪定义的以及在哪执行的没有任何关系
块级作用域
for 循环中用let ,会形成父作用域;每循环一次,都会形成一个子作用域;在子作用域中会把当前的i进行保存
构造函数
- 定义 : 当一个函数通过new关键字来执行的时候,这个函数就不是普通函数了,它是一个 构造函数,也是一个自定义类,当前的函数名就是类名,这个函数的返回值就是类的实例
- 为了让构造函数和普通函数有一个区别,我们建议写构造函数的时候首字母大写 [类名]
- 注意 : 一般情况下 ,我们写业务逻辑的时候不会用到构造函数.但是在封装库,框架,插件 以及组件的时候会用到构造函数模式
- 构造函数执行的时候,如果没有参数的时候,小括号可以不用写 let person = new Person
构造函数的执行过程
- 形成一个私有的作用域
- 形参赋值
- 变量提升
- 浏览器会创建一个对象 , [开辟一个新的堆内存] , 将这个对象指向了this [堆内存指针指 向了this实例]
- 代码从上到下执行
- 判断当前构造函数是否有return ,如果没有return默认将实例返回,如果有return , [ 如果 return的是基本数据类型,对实例没有影响; 如果是引用数据类型,那么实例就是该引用数据 类型
- 构造函数中 : 建议不要轻易return引用数据类型
私有属性
在构造函数中,给this添加属性值和方法,都属于当前实例的私有属性
公有属性
- 当前实例通过 proto 找到所有的属性和方法都是属于当前实例的公有属性
- 实例想要调取公有属性,直接可以调取,底层就是通过 proto 去找这个属性
- 用 in 这种方式来判断, 当前属性名[公有属性 + 私有属性] 是否属于这个对象 console.log("hasOwnProperty" in person1);
- Object 类提供一个 hasOwnProperty ,这个方法判断当前属性是否是该实例的私有属 性: 返回值是布尔值 console.log(person1.hasOwnProperty("age")) //true console.log(person1.hasOwnProperty("valueof")) //false
对象
对象
- 普通对象(对象数据类型)
- 构造函数new出来的一个实例 也是一个对象
- 类上面的原型也是一个对象
- 函数也是一个对象
原型模式需要记住三句
- 所有的函数都天生自带一个属性,叫做 prototype(原型) , 它是一个对象 ,既然是对象 , 那就是一个堆内存
- 所有函数的原型上面(都是开辟的这个堆内存), 都天生自带一个属性,叫做 constructor(构造函数) , 它指向当前类本身
- 所有的对象都天生自带一个属性 proto , 它指向当前所属类的原型