前端面向对象基础知识汇总

值类型和引用数据类型的区别:

​ 值类型:声明赋值都在栈内存,赋值是值直接复制一份

​ 引用数据类型:声明在栈,赋值在堆,中间用地址关联,赋值是地址赋值一份 一概全改

​ ps:深浅拷贝 :

​ 深拷贝实现:1. JSON.stringify() JSON.parse()

​ 2.递归(深层遍历)

​ 3.新的全局api: structuredClone (被克隆的对象, { transfer })

对象的动态特征:

​ 对象[‘属性名’] 获取的是属性值(属性名固定)

​ 对象[变量名] 为动态的属性名 传入变量名作为属性名的话 不能加引号!!!!

异常处理: try{

​ 尝试执行的代码

​ }catch(e){

​ 如果try里边的代码报错了 执行这里

​ }finally{

​ 这里是无论执行try还是catch都会执行的代码

​ 如果try和catch里没有return 可以省略 如果有 必须加

​ }

传统构造函数存在的问题:构造函数里要是有方法的话,只要是用new调用创建新的对象 都会给每个新创建的对象绑定相同的属性和方法。

原型:

​ 什么是原型:一个可以被赋值的一个类,通过赋值原型可以创建一个一模一样的新对象,也可以说原型就是一个对象模板,原型上定义了一些公用的属性和方法,,利用原型创建的新对象实例 会共享原型上的属性和方法。

​ 实现继承的方式:

​ 原型替换继承 直接把prototype指针指向被继承的对象

​ 混入式继承 遍历被继承的对象,把属性和方法遍历绑定给要继承的对象

​ 原型混入式继承 遍历被继承的对象,把属性和方法绑定给要继承的对象的原型上

​ Object.create(被继承的对象)

《javaScript语言精粹》提供的一种方法:

function create(obj){
function F(){}
F.prototype=obj;
return new F();
}
原型链

​ 什么是原型链: 原型链是原型对象创建过程中的历史记录 当访问一个对象的某个属性时 会在他本身查找,如果找不到 会到它的隐式原型链上查找

如果再找不到 就继续往上找 这个过程就形成了一个链式结构

Object.prototype上的一些方法

​ Object.hasOwnProperty() 判断指定属性是否属于该对象自身 true/false (对象.hasOwnProperty(‘属性名’))

​ 以后 用Object.hasOwn()替代 Object.hasOwnProperty() (Object.hasOwn(对象,‘要查询的属性’))

​ Object.isPrototypeOf() 判断对象1 是否包含在对象2 的原型链上

​ Object.toString() 将对象转换成字符串 默认返回 当前对象的 [类型名,构造函数]

​ Object.valueOf() 返回当前对象的原始值

Object的一些静态方法

​ Object.keys() 遍历当前对象,返回对象所有可枚举(可遍历)的键名放到数组里

​ Object.values() 遍历当前对象,返回对象可枚举(可遍历)所有的键的值数组里

​ Object.entries()遍历当前对象,返回对象可枚举(可遍历)所有的键值对 放到一个二维数组里 每个小数组都是一对键值

​ Object.assign() 合并对象(只有第一层是深拷贝)如果属性名重复,则后来的覆盖之前的

​ Object.freeze() 冻结当前对象(浅冻结) 深冻结需要用到递归 (冻结不可逆 但是可以通过克隆对象实现类似解冻的效果)

​ Object.isFrozen()判断当前对象是否被冻结

​ Object.seal() 密封对象(阻止添加新属性并将所有现有属性标记为不可配置,当前属性的值只要原来是可写的 就可以改变.)

​ Object.isSealed()判断当前对象是否被密封

​ Object.getPrototypeOf()返回当前对象的原型

​ Object.is() 比较两个值是否相等

​ Object.is()判断两个NaN是否相等 返回true

​ 判断+0 -0返回 false

Object.defineProperty()

​ 第一个参数; 对象

​ 第二个参数:属性名

​ 第三个参数:属性描述符对象

​ 属性描述符对象: {

​ value:‘属性值’,

​ writable: 当前属性是否能被修改(默认是false),

​ enumerable:是否可被枚举(遍历)默认是false,

​ configurable:是否可被删除,

​ set(){},

​ get(){} 存值器和取值器不能和value和writable同时存在

}

Object.defineProperties()

​ 第一个参数:对象

​ 第二个参数:

​ {

属性名1:{

value。。。

。。。。

},

属性名2:{

value。。。。

}

}

词法作用域:

​ 函数允许访问函数外的数据 整个代码结构中只有函数可以限定作用域(es6的let和const除外)作用域规则首先使用提升规则分析 如果当前作用域有名字了 就不会考虑外边的名字

闭包: 函数外部间接访问函数内部的数据

​ 内部的数据来不及及时释放 容易造成内存泄漏

寄生式对象: 在构造函数里 return一个对象 这个对象就是 寄生式对象(开发的时候要避免)

call 和apply

​ 区别: call接受的参数是 实参列表

​ apply接受的参数是 实参数组

iife立即执行函数 又叫 沙箱函数 (不管用什么参数 都得传进来哪怕是 window)

​ 写法:

​ ;(function(){}())

​ ;(function(){})()

​ ;+function(){}() //见到认识就行

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值