通常,java脚本允许覆盖(扩展新行为)除了那些未冻结或密封的对象之外的任何函数.在
JavaScript中,Math是一个内置对象.但是为什么JavaScript提供了覆盖内置对象中现有属性的权限?
请找截图:最初我发现数学对象中有min函数.我用功能更新了“min”属性.此操作替换了现有代码.
为了更清楚,我已从“min”删除了该属性.这里删除应该删除扩展行为而不是核心行为.但它正在消除核心属性为什么?
解决方法
扩展或修改本机代码称为
monkey-patching,它是一个设计特性而不是设计缺陷.实际上,Javascript中的所有内容都是可变和可扩展的,因此您有能力根据自己的需要更改基础知识(例如,您可以重载min方法,以便它可以使用不同的变量类型,而不仅仅是整数和浮点数),但具有该功能有责任,所以除非你知道你在做什么,否则通常不建议改变这些标准功能;同样,你必须要知道,如果你的JS文件将在别人的环境中运行,你可能无法依赖你认为可以做的一切(但是,你通常应该能够期待通常的全局方法和属性,这就是为什么你可以调用全局Object.prototype.keys或Array.prototype.slice而不是期望该方法在任何一个特定对象的原型上的原因.
简而言之,当您删除已修改的函数时,您将完全删除它,而不是将其恢复为某种原始状态.你基本上覆盖了原文,所以没有办法把它取回来(除了删除覆盖它的代码!).