IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:对象字面量

共 2 篇相关文章

IT 累计浏览 2,089

Javascript创建对象方式总结

这篇文章梳理了在JavaScript中创建对象的多种常见方式,从基础到进阶,覆盖了不同场景下的选择。作者从最简单的对象字面值讲起,逐步介绍了使用new关键字(包括内建和自定义构造函数)、原型方法、Object.create()、Object.assign()以及ES6的class等不同途径。 核心对比在于各方法的实现原理与适用性:对象字面值最为直接快捷;使用new和构造函数(或ES6类)能更结构化地创建多个相似实例,并涉及原型链绑定;Object.create()允许基于现有对象创建新对象,便于实现原型继承;Object.assign()则擅长合并多个源对象的属性,生成新对象。文章也提及了单例模式这种特殊用法。 对于初学者,掌握字面值和构造函数是关键;理解原型与Object.create()有助于深入对象模型;而在需要组合或扩展已有对象时,Object.assign()提供了便利。ES6的class语法糖则让基于类的写法更贴近传统面向对象语言的习惯。整体而言,文章系统梳理了这些方式的异同,为根据项目需求选择合适的对象创建模式提供了清晰参考。

IT 累计浏览 3,690

写了10年Javascript未必全了解的连续赋值运算

这篇讲的是连续赋值运算符“=”在JavaScript中一个反直觉的表现。作者从阅读jQuery源码时遇到的一行代码 `a.x = a = {n:2}` 出发,对它的执行顺序和内部机制产生了好奇。代码中,初始 `a` 指向 `{n:1}`,执行后 `a.x` 为 `undefined`,这个结果并不直接。 作者首先提出了两种常见的错误猜想:一种认为是从左到右赋值,另一种认为是从右到左但引擎会阻止赋值。为了验证,他引入了一个关键变量 `b` 来持有 `a` 的原始引用。实验结果令人惊讶:`a.x` 仍为 `undefined`,但 `b.x` 却变成了 `[object Object]`。这说明 `a.x = {n:2}` 这个赋值实际上执行了,只是发生在 `a` 被重新赋值之前。 文章揭示的核心机制是:该表达式被引擎解释为 `a.x = (a = {n:2})`。首先,最右边的 `a = {n:2}` 执行,使 `a` 指向新对象;然后,这个新值 `{n:2}` 被赋给左边 `a.x` 中的 `a`。关键在于,左边的 `a.x` 在表达式求值时,其引用(指向原对象 `{n:1}`)已被锁定,因此赋值操作作用于原对象,而非新对象。作者用箭头图示清晰地展示了这一引用分裂现象。 文章最后还以一个函数中 `var a = b = 5` 导致 `b` 泄漏为全局变量的例子,延伸了连续赋值的另一个常见陷阱。整篇文章通过对一个细节的深度追问,澄清了连等赋值的真实执行路径与引用关系的变化。