当前位置: 首页 > news >正文

JavaScript高频八股

一、原型和原型链

1、概念:

每个对象都有一个隐藏的属性__proto__(原型),指向它创建时的构造函数的prototype(原型对象)。当访问对象的一个属性或方法时,如果对象本身没有,就会去它的__proto__上找,如果还没有,就继续往上,直到null(原型链的终点)。这个查找的链条就是原型链。

2、核心概念

  • prototype(显式原型)函数独有的属性。当你定义一个函数时,它会自动获得一个prototype属性,这个属性是一个对象,用来存放所有由该函数构造出来的实例共享的属性和方法。

  • __proto__(隐式原型)对象独有的属性。每个对象(包括函数对象)都有一个__proto__属性,它指向创建这个对象的构造函数的prototype

  • constructor(构造器):每个prototype对象都有一个constructor属性,指向它关联的构造函数。

3、回答要点:

  1. 原型是 JS 实现继承的机制,通过__proto__将对象串联起来。

  2. 函数有prototype,实例对象有__proto__,实例的__proto__指向构造函数的prototype

  3. 原型链的终点是null

  4. 属性查找是向上追溯的,这就是原型链的意义。

  5. 实际开发中,我们可以利用原型链来挂载共享方法节省内存,也可以通过hasOwnProperty来区分自身和继承属性。同时要注意性能问题,避免在原型链上查找太深。

4、画原型链要点:

(1)引用类型都是对象,每个对象都有原型对象。
(2)对象都是由构造函数创建,对象的__proto__属性指向其原型对象,构造函数的prototype属性指向其创建的对象实例的原型对象,所以对象的__proto__属性等于创建它的构造函数的prototype属性。
(3)所有通过字面量表示法创建的普通对象的构造函数为Object
(4)所有原型对象都是普通对象,构造函数为Object
(5)所有(构造)函数的构造函数是Function
(6)Object.prototype没有原型对象,所以Object.prototype._proto_=null

最后对原生构造函数Object和Function下手:

// 原生构造函数也是函数对象,其构造函数为Function
Object.__proto__ === Function.prototype
// 特例
Function.__proto__ === Function.prototype

二、JS手撕:

1.数组扁平化:

概念:把多层嵌套的数组(数组套数组)"拍平"成一层的数组,例子:

// 原始数组(嵌套了多层) const nested = [1, [2, 3], [4, [5, 6]]]; // 扁平化后(变成一层) const flat = [1, 2, 3, 4, 5, 6];

递归法:

其中,arr[i]instanceofArray判断数组元素是不是数组

concat是 JS 数组的方法,用来把两个或多个数组合并成一个新数组

function flatten(arr) { let result = []; for (let i = 0; i < arr.length; i++) { if (arr[i] instanceof Array) { // 是数组:递归拍平,然后合并 result = result.concat(flatten(arr[i])); } else { // 不是数组:直接添加 result.push(arr[i]); } } return result; }

三、this指向

四、foreach map区别

http://www.jsqmd.com/news/593971/

相关文章:

  • MapboxGL离线部署实战:自定义字体与本地化渲染方案
  • 【算法学习专栏】动态规划基础·简单三题精讲(70.爬楼梯、118.杨辉三角、121.买卖股票的最佳时机)
  • 08_微服务划分与团队人数之监控治理与跨团队协作
  • 分布式微电网能源交易算法matlab源代码, 代码按照高水平文章复现,保证正确 孤岛微电网之间...
  • 在Ubuntu 22.04上搞定SRILM 1.7.3:从下载到`make test`成功的保姆级记录
  • 房屋租赁管理系统开发教程:基于SSM框架实战全记录
  • WebSocket 与 HTTP 有什么区别:从单向请求到全双工实时通信
  • C语言完美演绎7-1
  • 09_微服务划分与团队人数之阿里实践与行业案例
  • 如何用web的知识创建超链接并改变超链接的表达形式
  • 2026年美国移民机构哪家靠谱?行业服务质量解析 - 品牌排行榜
  • NCCloud OpenAPI扩展开发避坑指南:从NCC2005到BIP高级版,配置与调用方式全解析
  • 基于Copula函数的多风场出力相关性分析场景生成与聚类削减方法(MATLAB实现)
  • 2026青海婚纱摄影推荐|高原旅拍标杆,用影像定格一生幸福 - 江湖评测
  • 第十届题目
  • 【算法学习专栏】动态规划基础·中等两题精讲(198.打家劫舍、322.零钱兑换)
  • 四场景下的两阶段鲁棒优化模型构建与实施——列与约束生成算法及其数据处理机制探究
  • 手机来电显示公司名哪家能实现?专业企业号码认证服务商推荐 - 企业服务推荐
  • MQ常见问题整理--重点笔记
  • Cobalt Strike实战指南:从基础配置到高级渗透技巧
  • 企业私有化 RAG 低成本部署实战
  • SEO关键词长尾词优化工具源码解析:站长流量增长的秘密武器
  • 10_微服务划分与团队人数之反模式与Spring Cloud Alibaba避坑指南
  • 【技术干货】Qwen 3.6 Plus 实战:用百万上下文打造“代理式”AI 编码工作流
  • 微前端状态管理的真相:Module Federation + 跨应用通信实战
  • 06_Neo4j知识体系之AuraDB云服务与部署实战
  • [具身智能-229]:OpenCV 的 DNN (Deep Neural Networks) 模块,可以直接加载和运行,通过PyTorch AI框架训练好的模型,而不需要安装PyTorch AI框架
  • BeMusic 3.1.3音乐网站源码:打造个人专属音乐平台的完美选择
  • 04_Neo4j知识体系之GDS图数据科学库实战
  • 如何去学习