介绍了 JavaScript 中 new 操作符的工作原理及其四个步骤,并通过 myNew 方法模拟实现 new 的功能。示例展示了构造函数返回普通对象或自定义对象时的不同行为,帮助理解 new 的内部机制及其应用场景。
介绍了函数柯里化的概念及其实现方法,通过递归调用将函数参数逐步累积,直至满足条件后执行。示例展示了柯里化在求和函数中的应用,通过重写 toString 方法实现链式调用并返回结果。
介绍了 JavaScript 中 bind() 函数的原理及其实现,bind() 会创建一个绑定函数,固定 this 值和部分参数。绑定函数通过内部属性 [[BoundTargetFunction]] 和 [[Call]] 实现调用逻辑,并支持 new 运算符构造。示例提供了 bind() 方法的手动实现。
描述了在 VSCode 中加载多个项目时 `.eslintignore` 文件未生效的问题,并通过配置 `eslint.workingDirectories` 解决。推荐使用模式 4,通过正则匹配指定工作目录,适用于 monorepo 项目结构,有效解决了文件忽略问题。
模拟环境
// 如何判断原型链上重复的属性
// 模拟一个原型链 Baz => Bar => Foo => FooProto => Object => null
const FooProto = {
ak: 1
}
const Foo = Object.create(FooProto)
Foo.ak = 2
Foo.aj = 4
const Bar = Object.create(Foo)
Bar.ak = 3
Bar.aj = 5
Bar.am = 7
const Baz = Object.create(Bar)
"如何判断原型链上重复的属性?"继续阅读
介绍了 var、let 和 const 在 JavaScript 中的作用域和行为差异。var 声明的变量会提升并挂载到 window 对象上,而 let 和 const 声明的变量存在暂时性死区 (TDZ),在声明代码执行前无法访问,否则会抛出引用错误。
介绍了通过组合设备参数生成用户唯一标识的方法,并使用 fingerprintjs2 库实现匿名指纹获取。代码示例展示了如何利用 requestIdleCallback 在浏览器空闲时生成指纹,同时提供了相关参考和安装指南。
讲解了在开发 NPM 包时如何通过 rollup-plugin-replace 和 webpack.DefinePlugin 处理环境变量,分别展示了两种工具的配置方法和代码示例,帮助实现开发与打包环境的兼容性。
介绍了浏览器中 unhandledrejection 和 rejectionhandled 事件的作用与使用方法,通过监听未处理和已处理的 Promise 拒绝状态,展示了如何跟踪并处理程序中的拒绝状态,提供了代码示例及相关笔记参考。
讲解了如何使用生成器为对象定义迭代器,并展示了访问默认迭代器和迭代器与扩展运算符的结合,通过示例说明了迭代器在对象、数组和字符串中的应用,强调了生成器函数返回迭代器的特性。