在本文中,我们分析了 React 源代码中 Object.preventExtensions() 的用法。
当标志 hasBadMapPolyfill 为 false 并且 typeof Object.preventExtensions 是一个函数时,将调用 Object.preventExtensions()。
但是 Object.preventExtensions() 是做什么的?
Object.preventExtensions() 静态方法可防止将新属性添加到对象中(即防止将来对该对象进行扩展)。它还可以防止对象的原型被重新分配。
// Example picked from MDN docs const object1 = {}; Object.preventExtensions(object1); try { Object.defineProperty(object1, 'property1', { value: 42, }); } catch (e) { console.log(e); // Expected output: // TypeError: Cannot define property property1, object is not extensible }
阅读有关 Object.preventExtension() 的 MDN 文档
不允许添加扩展一定有充分的理由。我跟踪了使用它的函数,FiberNode 函数
对此调用 Object.preventExtension,但是哪个函数调用 FiberNode?
[createFiberImplClass](https://github.com/facebook/react/blob/5d19e1c8d1a6c0b5cd7532d43b707191eaf105b7/packages/react-reconciler/src/ReactFiber.js#L213-L226)
调用 Object.preventExtension.
此评论提供了为什么对象无法扩展的解释。
虽然我并不完全理解这些功能,但是了解了如何在现实世界的开源项目中使用 Object.preventExtensions。
在 Think Throo,我们的使命是教授开源项目中使用的高级代码库架构概念。
通过在 Next.js/React 中练习高级架构概念,将您的编码技能提高 10 倍,学习最佳实践并构建生产级项目。
我们是开源的 — https://github.com/thinkthroo/thinkthroo (请给我们一颗星!)
通过我们基于代码库架构的高级课程来提高您的团队的技能。请通过hello@thinkthroo.com联系我们了解更多信息!
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/preventExtensions
https://github.com/facebook/react/blob/5d19e1c8d1a6c0b5cd7532d43b707191eaf105b7/packages/react-reconciler/src/ReactFiber.js#L207
https://github.com/facebook/react/blob/5d19e1c8d1a6c0b5cd7532d43b707191eaf105b7/packages/react-reconciler/src/ReactFiber.js#L298
https://github.com/facebook/react/blob/5d19e1c8d1a6c0b5cd7532d43b707191eaf105b7/packages/react-reconciler/src/ReactFiber.js#L136
https://github.com/facebook/react/blob/5d19e1c8d1a6c0b5cd7532d43b707191eaf105b7/packages/react-reconciler/src/ReactFiber.js#L213-L226
以上是JavaScript 中的 Object.preventExtensions。的详细内容。更多信息请关注PHP中文网其他相关文章!