为什么JavaScript提供了覆盖内置对象中现有属性的访问权限

san*_*nty 7 javascript

通常,java-script允许覆盖(扩展新行为)除了那些未冻结或密封的对象之外的任何函数.在JavaScript中,Math是一个内置对象.但是为什么JavaScript提供了覆盖内置对象中现有属性的权限?

请找截图:最初我发现数学对象中有min函数.我已经用功能更新了"min"属性.此操作替换了现有代码.为了更清楚,我已从"min"删除了该属性.这里删除应该删除扩展行为而不是核心行为.但它正在消除核心属性为什么?

在此输入图像描述

use*_*097 3

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

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