如何避免 dart html(dart web)中的函数覆盖?

How to avoid function overrides in dart html (dart web)?

假设我在 dart 代码中调用 window.alert('my message')。但是,如果(正是我的情况)有一个脚本在我的脚本 之前覆盖 alert 函数 怎么办。现在,如果我尝试调用 window.alert('message') 它会执行覆盖的 alert 函数而不是初始函数。

是否有一种机制可以确保所有 函数不会以描述的方式被覆盖?或者我是否应该始终确保 dart 脚本首先在页面上执行,以确保不会进行不需要的覆盖并且行为稳定,这是唯一的方法?

Here 是基本的 github 回购协议,如果您想实时查看问题。

编辑 1:

main.dart

import 'dart:html';

void main() {
  window.alert('alert');
}

index.html

<html>
<head>
    <title>test</title>
    <script>
        alert = (variable) => confirm("hehe it's jinxed");
    </script>
    <script defer src="main.dart.js"></script>
</head>
</html>

听起来不可能

如果某些东西“覆盖”了 JavaScript alert 函数,它实际上覆盖了写入 [= window 对象的 10=] 属性。旧值在那一点上完全丢失,甚至不可能(轻易)检测到这已经发生。

如果您的代码没有运行 首先 在网络浏览器中,您将无法保护自己免受此影响。如果您的代码首先执行 运行,您可以使用 Object.freeze 或类似功能来锁定原始属性,或将它们复制到您自己的变量中。如果您的代码只是稍后直接使用 window.alert,那么简单地先 运行ning 并不能保证。您必须努力防止以后的代码也覆盖它。

这确实是一个 JavaScript 问题,dart:html 或 Dart 编译代码没有什么特别之处,它会影响任何 JavaScript 代码,但 运行 首先在浏览器中。