javascript - 我们可以更改预定义函数的定义吗?那么如何预防呢?

标签 javascript

<分区>

据我所知(在 Google Chrome 控制台中),我们可以更改预定义函数的定义。让我通过代码来解释:

function alert(){
  return 2+2;
  }

我正在调用 alert("hi"),它返回 4,没关系,正如我们定义的那样。 但是,即使我调用 window.alert("hi"),它也会返回 4,这出乎我的意料。

这里我只是创建了一个新函数,我没有提到任何object namePrototype 属性,但它仍然覆盖了window对象属性本身。

我的疑问是,如果我们改变函数的定义,它会不会覆盖所有对象中同名函数的定义??

假设我有两个对象 objAobjB,它们都有一个名为 strange() 的函数。现在我在这两个对象的外部定义了一个函数 strange() 。那么,是否会覆盖objAobjBstrange()的定义呢?如果是这样,为什么?

如果是这样,如何防止这种情况发生?意味着如何防止覆盖所有对象?

提前致谢...!!!!

最佳答案

否 - 通过声明 function alert() 您正在重新定义 window.alert() 函数,因为默认作用域是窗口

var newObj = {
    alert: function() {
        return "this is a functino on my newObj object";
    }
};

function alert() {
    return 2 + 2;
}

console.log(alert());
console.log(window.alert());
console.log(newObj.alert());

关于javascript - 我们可以更改预定义函数的定义吗?那么如何预防呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24061278/

相关文章:

javascript - 按 Angular 加权平均值排序

javascript - 如何使用 jquery/javascript 转换时间/日期?

javascript - 关于我第一个使用本地 RPC、Web3 和 Remix 的契约(Contract)的一些问题

javascript - 灯箱 - 自动调整全屏

javascript - “属性值未定义” - 如何修复未定义的属性?

javascript - ng-model 从下拉列表中获取错误的值

javascript - jQuery noConflict IE 问题

javascript - 如何在 Angularjs 指令中渲染 html?

javascript - Thymeleaf - 在 Javascript 代码中迭代模型属性

javascript - 传递一串less给less.js并接收css?