前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库JavaScript · 对象与原型面试题
面试知识索引 · 分类、标签与搜索

JavaScript · 对象与原型面试题,35 道完整答案

JavaScript · 对象与原型面试题第 1 页,显示第 1–35 题,共找到 35 道完整解析,可继续按分类、标签与关键词缩小范围。

35筛选结果
52技术分类
178检索标签
1索引分页
按分类建立知识面,再用标签和搜索定位问题

每页只渲染 50 道题。分类与标签分页可抓取,自由搜索结果不会制造无限 SEO 页面。

快速定位

分类、标签与关键词搜索

清除全部筛选
题库检索
技术分类52 个
全部分类5000JavaScript285AI Agent511浏览器301React281AI 开发262CSS240Node.js217TypeScript206Vue180前端工程化138React Native135
查看全部 52 个分类
操作系统135数据库134Docker95计算机网络94API 设计90Kubernetes90HTML89Redis89全栈开发88分布式系统88系统设计86HTTP85Next.js60Angular58Linux53Nuxt51PostgreSQL46可观测性46设计模式46小程序45身份与权限45无障碍44MongoDB43PWA43Web 安全43Git42前端测试42前端性能41WebAssembly40测试40AI 工程37SvelteKit37Go35前端数据管理30React Router29AI 全栈28Svelte27算法12Java10数据结构5前端手写题3
JavaScript 标签22 个
全部标签对象与原型35值与类型50异步编程48数据处理45模块与语言机制40函数与作用域39数组与集合38异步与 Promise34性能优化7并发编程5构建工具5流处理4缓存4表单2事件循环1
查看其余 7 个标签
作用域与函数1容器化1异步与浏览器1手写与交互性能1测试1相等比较1算法1
当前页01 / 1

正在显示第 1–35 题

JavaScript35
第 1 页

本页面试问题

按稳定语义路径排序

  1. 0001
    JavaScript对象与原型

    在 ES6 class 的构造器中必须先调用 super() 吗?为什么?

    派生类构造器通常要在访问 this 前调用 super(),因为父类构造过程负责提供可用的实例,随后才初始化子类字段。若构造器显式返回另一个对象,可以不调用 super(),但得到的对象不会自动拥有原本子类实例的初始化结果。

    核心关键词class 构造器 super this 绑定顺序
    #对象与原型
  2. 0002
    JavaScript对象与原型

    类字段箭头函数和原型方法有什么区别?

    类字段箭头函数在每次创建实例时单独生成,并捕获该实例的 this,适合交给事件回调而不必额外绑定。原型方法由实例共享,方法被提取后 this 由调用方式决定;内存开销、继承覆盖和函数引用稳定性因此各有取舍。

    核心关键词class 字段箭头函数方法与原型方法差异
    #对象与原型#性能优化
  3. 0003
    JavaScript对象与原型

    构造函数返回对象或原始值时,new 最后会得到什么?

    普通构造函数被 new 调用时,显式返回对象或函数会替换默认实例,返回 null 或其他原始值则被忽略。返回外部对象后,原先写在 this 上的属性不会迁移,instanceof 结果也可能改变;class 基类和派生类对返回原始值还有额外限制。

    核心关键词构造函数 return 对象或原始值时 new 的结果
    #对象与原型
  4. 0004
    JavaScript对象与原型

    class 里的 # 私有字段怎么写?它为什么是真正的私有?

    class 的 # 私有字段只能在声明它的类体内部访问,类外直接写 obj.#x 是语法错误。它不会出现在 Object.keys、JSON.stringify 或普通 Proxy 陷阱中;#x in obj 可做品牌检查,而 TypeScript private 主要是编译期限制,两者不能混同。

    核心关键词class 私有字段 # 语法与真正私有
    #对象与原型
  5. 0005
    JavaScript对象与原型

    ES5 继承为什么要写 Child.prototype = new Parent()?Object.create 改进了什么?

    ES5 时代把 Child.prototype 设成 new Parent() 虽能接上父类方法,也会额外执行父构造函数,并把父实例属性放到子类原型上。用 Object.create 建立原型链,再在 Child 内调用 Parent.call 初始化实例,可把两件事分开处理,避免共享可变状态。

    核心关键词ES5 原型继承写法 Object.create 改进
    #对象与原型
  6. 0006
    JavaScript对象与原型

    Object.preventExtensions() 之后还能给对象加属性吗?怎么判断?

    Object.preventExtensions 会阻止对象增加自有属性,已有属性仍可能修改或删除,且这种限制不能撤销。Object.isExtensible 可检查状态;严格模式下添加属性会报错,不可扩展对象的原型也不能随意更换,seal 和 freeze 则施加更强约束。

    核心关键词Object.preventExtensions 扩展性判断 isExtensible
    #对象与原型
  7. 0007
    JavaScript对象与原型

    call、apply、bind 有什么区别?各自什么时候用?

    call 与 apply 都会立即调用函数并指定 this,前者逐个传参,后者传类数组参数;bind 则返回延后调用的新函数。借用数组方法和事件回调中经常遇到这三者,已绑定函数再用 call 通常改不了 this,被 new 调用时又有特殊规则。

    核心关键词call apply bind 区别与使用场景
    #对象与原型
  8. 0008
    JavaScript对象与原型

    Object.getPrototypeOf 和 Object.setPrototypeOf 现在还该用吗?

    Object.getPrototypeOf 是读取原型的标准方式,Object.setPrototypeOf 可在运行时更换原型,却可能破坏引擎优化。多数场景更适合在创建对象时就用 Object.create 或 class 确定继承关系;原型成环和不可扩展对象还会使设置失败。

    核心关键词Object.getPrototypeOf setPrototypeOf 使用与地位
    #对象与原型
  9. 0009
    JavaScript对象与原型

    class 里的 getter/setter 和普通方法有什么区别?和描述符里的 get/set 是一回事吗?

    类中的 get 与 set 会把属性定义成访问器,读取或赋值时自动运行,而不是像普通方法那样显式调用。它们与属性描述符中的访问器共用一套机制,但默认可枚举性不同;同名实例属性遮蔽访问器,或 setter 里给同名属性赋值,都可能造成意外。

    核心关键词class getter setter 与属性描述符的关系
    #对象与原型
  10. 0010
    JavaScript对象与原型

    怎么判断一个属性是对象自己的,还是从原型上继承来的?

    in 会沿原型链查找属性,Object.hasOwn 与 hasOwnProperty 只检查自有属性。用 Object.create(null) 做字典或对象覆盖了 hasOwnProperty 方法时,Object.hasOwn 更稳;遍历时还要区分 for...in 的继承键与 Object.keys 的自有键。

    核心关键词hasOwnProperty 与 in 区分自身属性和原型属性
    #对象与原型
  11. 0011
    JavaScript对象与原型

    Object.is 和 === 有什么区别?NaN 和 +0、-0 怎么比?

    Object.is 与 === 只在 NaN 自比和正负零比较上不同;两个对象无论内容多像,仍按引用身份比较。React 会用 Object.is 判断状态是否变化,includes 与 Map 又采用不区分正负零的 SameValueZero,相等规则需结合具体 API 看。

    核心关键词Object.is 与 === 区别 NaN +0 -0
    #对象与原型
  12. 0012
    JavaScript对象与原型

    Symbol.hasInstance 是怎么改写 instanceof 结果的?

    x instanceof C 会优先调用 C 的 Symbol.hasInstance 方法,只有采用默认实现时才按原型链判断。自定义静态方法可让类型判定遵循接口形状,但直接给继承来的只读方法赋值可能失败;跨 iframe 的构造函数身份也仍是另一层边界。

    核心关键词Symbol.hasInstance 自定义 instanceof 行为
    #对象与原型
  13. 0013
    JavaScript对象与原型

    isPrototypeOf 和 instanceof 都查原型链,区别在哪?

    isPrototypeOf 直接检查一个对象是否位于另一对象的原型链上;instanceof 通常取构造函数的 prototype 做相似判断,但还可能由 Symbol.hasInstance 改写。用 Object.create 建立的对象不一定有对应构造函数,替换构造函数原型也会改变后续判断结果。

    核心关键词isPrototypeOf 与 instanceof 区别
    #对象与原型
  14. 0014
    JavaScript对象与原型

    Object.keys、getOwnPropertyNames、getOwnPropertySymbols 各能拿到哪些键?

    Object.keys 只返回自有可枚举字符串键;Object.getOwnPropertyNames 包含不可枚举字符串键,Object.getOwnPropertySymbols 返回符号键。Reflect.ownKeys 会合并自有字符串与符号键,for...in 则可能遍历继承属性;应按所需键类型选 API。

    核心关键词Object.keys getOwnPropertyNames getOwnPropertySymbols 区别
    #对象与原型
  15. 0015
    JavaScript对象与原型

    一个 class 只能继承一个父类,想复用多组方法怎么办?

    JavaScript 的 class 只能继承一个父类,mixin 可把多组独立能力组合进同一类。类工厂通过继承返回新类,Object.assign 只复制可枚举自有属性,因此直接复制类原型通常拿不到方法;多个 mixin 出现同名方法时还需要确定覆盖顺序。

    核心关键词mixin 模式 class 组合复用方法
    #对象与原型
  16. 0016
    JavaScript对象与原型

    Object.create(null) 创建的对象有什么特别?哪些方法用不了?

    Object.create(null) 生成没有 Object.prototype 的纯字典,不会继承 toString 和 hasOwnProperty,字符串隐式转换也可能失败。它适合避免键名冲突,检查自有键应使用 Object.hasOwn;需要任意类型键、频繁增删或明确遍历语义时可考虑 Map。

    核心关键词Object.create(null) 无原型对象特点
    #对象与原型
  17. 0017
    JavaScript对象与原型

    属性设成 configurable:false 之后,哪些操作就做不了了?

    属性的 configurable 为 false 后,不能删除、改可枚举性或在数据属性与访问器之间切换。若它仍可写,值还可以改变,writable 也能从 true 降到 false;seal 和 freeze 会批量施加不同程度的类似限制。

    核心关键词configurable false 禁止哪些操作
    #对象与原型#流处理
  18. 0018
    JavaScript对象与原型

    可选链 ?. 和用 && 一层层判断,有什么不一样?

    可选链 ?. 只在左侧为 null 或 undefined 时短路,返回 undefined;&& 碰到零、空字符串或 false 也会停下,并保留那个假值。访问属性、调用方法和连续链的短路范围并不完全相同,给可能缺失的回调加 ?. 时尤其要看调用对象。

    核心关键词可选链 ?. 与 && 短路的区别
    #对象与原型
  19. 0019
    JavaScript对象与原型

    对象里的数字键,遍历出来为什么总排在最前面?

    对象自有键的通常顺序是数组索引键升序、其他字符串键按创建顺序,最后是 Symbol 键;"01"、"-1" 和 "1.5" 不属于数组索引键。Object.keys、Reflect.ownKeys 与 JSON.stringify 选择的键范围不同,不能把遍历顺序当作业务排序。

    核心关键词对象整数键枚举顺序及原因
    #对象与原型
  20. 0020
    JavaScript对象与原型

    属性设成 enumerable:false 后,for...in 和 Object.keys 还能遍历到吗?

    enumerable: false 的属性仍可直接读取,也能被 in 找到,却不会出现在 Object.keys、对象展开或常规 JSON.stringify 结果中。for...in 同样跳过不可枚举属性,但还会遍历继承来的可枚举键;需要列出全部自有键时可用 Reflect.ownKeys。

    核心关键词enumerable 与属性遍历
    #对象与原型
  21. 0021
    JavaScript对象与原型

    用 defineProperty 写 getter/setter,和直接在字面量里写 get/set 有什么不一样?

    字面量与 Object.defineProperty 定义的 getter、setter 在读写时都执行函数,但后者省略 enumerable 和 configurable 时都为 false。于是 Object.keys、JSON.stringify 可能看不到它,删除也会失败;Vue 2 的响应式实现曾利用访问器。

    核心关键词Object.defineProperty 定义 getter setter 与字面量区别
    #对象与原型
  22. 0022
    JavaScript对象与原型

    给 writable 为 false 的属性赋值,严格模式和非严格模式分别会怎样?

    给不可写属性赋值,在严格模式中抛 TypeError,非严格模式下通常静默失败;是否严格取决于赋值代码所在环境。原型上的只读属性也可能阻挡子对象同名赋值,Reflect.set 可用布尔返回值识别失败,configurable 与 freeze 又控制另外的边界。

    核心关键词writable false 严格模式与非严格模式赋值结果
    #对象与原型#流处理
  23. 0023
    JavaScript对象与原型

    读取一个对象属性时,JavaScript 是按什么顺序在原型链上找的?

    读取对象属性时先查自身,找不到才沿原型链逐层向上,第一次命中即停止,走到 null 仍没有就得到 undefined。普通赋值通常写入对象自身,和读取过程并不对称;继承方法中的 this、运行中改原型以及各种枚举 API 也各有边界。

    核心关键词JavaScript 原型链属性查找顺序
    #对象与原型
  24. 0024
    JavaScript对象与原型

    Proxy 的 get 陷阱能做什么?怎么用它实现链式调用?

    Proxy 的 get 陷阱接收目标、属性键和接收者,可在读取时返回计算结果或代理本身,因而能实现链式 API。代理 Map 等有内部槽的内置对象时可能报错,方法里的 this 也可能改变;误把 then 属性生成为函数还会影响 await。

    核心关键词Proxy get 陷阱 链式调用应用
    #对象与原型
  25. 0025
    JavaScript对象与原型

    目标属性不可写又不可配置时,Proxy 的 set 陷阱能返回什么?

    Proxy 陷阱不能谎报违反目标对象固定属性约束的结果。对不可写且不可配置的数据属性设置不同值时,set 若声称成功会导致 TypeError;get、has 和 ownKeys 也受对应不变量限制,代理校验必须尊重真实目标状态。

    核心关键词Proxy set 陷阱不变量 不可写属性
    #对象与原型
  26. 0026
    JavaScript对象与原型

    Object.freeze 冻住的对象,为什么里面的属性还能改?深度冻结怎么写?

    Object.freeze 只冻结对象自身第一层的属性描述符,嵌套对象依旧可以修改。非严格模式下的失败写入可能不报错;递归冻结则需要处理循环引用、Symbol 键与访问器属性,同时留意它仍不能冻结某些内部状态。

    核心关键词Object.freeze 浅冻结与深度冻结实现
    #对象与原型
  27. 0027
    JavaScript对象与原型

    Reflect.ownKeys 返回的键是什么顺序?和 Object.keys 有什么区别?

    Reflect.ownKeys 返回对象自身所有的键,包括不可枚举的和 Symbol 键,顺序是整数键升序、字符串键按插入顺序、Symbol 最后。对比 Object.keys、getOwnPropertyNames、getOwnPropertySymbols 的范围,以及对象键顺序在实际代码里的坑。

    核心关键词Reflect.ownKeys 键顺序 与 Object.keys 区别
    #对象与原型
  28. 0028
    JavaScript对象与原型

    Reflect.set 和直接用等号赋值,有什么不一样?

    Reflect.set 与赋值语句采用相同的对象写入机制,但前者返回成功与否的布尔值,还能显式指定 receiver。只读属性写入失败时,严格模式赋值会抛错,非严格模式可能静默失败;Proxy 的 set 陷阱中把 receiver 传对还会影响 setter 的 this。

    核心关键词Reflect.set 与普通赋值行为区别
    #对象与原型
  29. 0029
    JavaScript对象与原型

    怎么创建一个可撤销的 Proxy?撤销之后再访问会怎样?

    Proxy.revocable 返回代理和撤销函数;撤销后读取、写入、删键或列键都会抛 TypeError,但 typeof 仍可返回类型字符串。它适合把对象能力临时交给第三方代码,撤销并不会自动销毁目标对象或切断别处持有的原始引用。

    核心关键词Proxy.revocable 可撤销代理 撤销后行为
    #对象与原型
  30. 0030
    JavaScript对象与原型

    Object.seal 和 Object.freeze 有什么区别?各自还允许改什么?

    Object.seal 阻止增删属性,已有可写属性仍可改值;Object.freeze 进一步把自有数据属性设为不可写。两者都只处理对象自身一层,嵌套对象照样能变;在非严格模式下,违规写入还可能静默失败。

    核心关键词Object.seal 与 Object.freeze 允许的操作区别
    #对象与原型
  31. 0031
    JavaScript对象与原型

    深拷贝和浅拷贝有什么区别?手写深拷贝怎么处理循环引用?

    浅拷贝的新对象仍与原对象共享嵌套引用,深拷贝则尝试复制可达的对象图。递归实现需要用 WeakMap 处理循环引用;JSON 序列化会丢失多种值,structuredClone 也不复制函数与私有字段,选择方案要看数据形状。

    核心关键词深拷贝实现 循环引用处理
    #对象与原型
  32. 0032
    JavaScript对象与原型

    { ...obj } 会复制哪些属性?不可枚举的、原型上的会被复制吗?

    对象展开只复制自身可枚举的字符串键与 Symbol 键,不带走原型方法或不可枚举属性。getter 会在复制时执行,结果保存为普通值;类实例被展开后丢方法,和 Object.assign 的差别则主要体现在写入目标的方式。

    核心关键词对象扩展运算符复制哪些属性 可枚举性
    #对象与原型
  33. 0033
    JavaScript对象与原型

    class 的静态方法会被子类继承吗?子类里怎么调用父类的静态方法?

    子类可以继承父类静态方法,因为 extends 也把子类构造函数接到父类构造函数的原型链上。静态方法里的 this 指向调用它的类,super 可访问父类静态方法;实例不能直接调用它,修改继承来的静态字段还可能只遮蔽父类值。

    核心关键词class 静态方法是否被子类继承
    #对象与原型
  34. 0034
    JavaScript对象与原型

    怎么用 Symbol.toStringTag 改变 Object.prototype.toString 的输出?

    Object.prototype.toString 生成的 [object Type] 标签可受 Symbol.toStringTag 属性影响,内置 Map、Promise 也有各自标签。自定义类型常在原型上提供 getter;由于对象能改写这个标签,不能把它作为不可伪造的安全类型证明。

    核心关键词Symbol.toStringTag 自定义 Object.prototype.toString
    #对象与原型
  35. 0035
    JavaScript对象与原型

    用 WeakMap 怎么模拟 class 的私有属性?和 # 私有字段比各有什么优劣?

    模块作用域中的 WeakMap 可以用实例作键存内部状态,外部代码拿不到那份映射;只要别处没有强引用,键本身不会被 WeakMap 留住。它与类的 # 私有字段在访问错误、继承、性能和调试体验上仍有区别,选择时要看封装需求。

    核心关键词WeakMap 模拟私有状态 对比 # 私有字段
    #对象与原型
上一页
1
下一页
前端进阶之旅本地 Markdown 维护 · 服务端分页 · 完整内容对用户与搜索引擎一致