gpt4 book ai didi

javascript - 为什么 JavaScript 允许访问覆盖内置对象中的现有属性

转载 作者:数据小太阳 更新时间:2023-10-29 04:42:28 24 4
gpt4 key购买 nike

通常 java 脚本允许覆盖(扩展新行为)任何功能,除了那些未卡住或密封的对象。在 JavaScript 中,Math 是一个内置对象。但为什么 JavaScript 允许访问覆盖内置对象中的现有属性?

请查看屏幕截图:最初我发现 min 函数在 Math Object 中可用。我已经用函数更新了“min”属性。此操作替换了现有代码。为了更清楚起见,我从“min”中删除了该属性。这里删除应该删除扩展行为而不是核心行为。但为什么要删除核心属性?

enter image description here

最佳答案

扩展或修改 native 代码称为monkey-patching ,这是一个设计特征而不是设计缺陷。在 Javascript 中几乎所有东西都是可变的和可扩展的,因此你有能力改 rebase 础以满足你自己的需要(例如,你可以重载 min 方法,这样它就可以使用不同的变量类型,而不仅仅是整数和 float ),但是有了这种能力责任来了,所以通常不建议更改这些标准功能,除非您知道自己在做什么;同样,您必须意识到,如果您的 JS 文件将在其他人的环境中运行,您可能无法依赖您认为可以的一切(但是,您通常应该能够期望通常的全局方法和属性,这就是为什么您可以调用全局 Object.prototype.keys 或 Array.prototype.slice 而不是期望该方法位于任何一个特定对象的原型(prototype)上)。

简而言之,当您删除已修改的函数时,您将完全删除它,而不是将其恢复到某种原始状态。您基本上覆盖了原始文件,因此没有办法恢复它(除非删除覆盖它的代码!)。

关于javascript - 为什么 JavaScript 允许访问覆盖内置对象中的现有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23907080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com