ECMAScript中的本地类和宿主类是什么?

我在学习ECMAScript的继承概念时看到

要用 ECMAScript
实现继承机制,您可以从要继承的基类入手。所有开发者定义的类都可作为基类。出于安全原因,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码,因为这些代码可以被用于恶意攻击。

请问这里面的本地类和宿主类指的是什么?为什么访问他们之后可以造成恶意攻击?

阅读 3.3k
2 个回答

本地类是js引擎提供的类,String Object等等。宿主类是你运行环境提供的,像chrome这类浏览器提供的 window这个类就是宿主类。

感觉,本地类应该是 Native Object 吧。。定义在这里:http://es5.github.io/#x4.3.6
宿主类是 Host Object,定义在这里:http://es5.github.io/#x4.3.8


简单来说,Native Object 就是,不依赖宿主环境的 ECMAScript 对象。比如,Function, RegExp, Date 这类的构造器
相对应地,Host Object 是依赖于宿主环境的 ECMAScript 对象。比如 window, location, document 这类的

宿主环境,我的理解就是:运行 ECMAScript 的地方。。比如,你可以在命令行里的 nodejs 运行,也可以在浏览器中运行。那么不管你在哪儿运行,new Date() 总会给你正确的结果,但 document.getElementById 就只能在浏览器环境中实现了,nodejs 并没有这个。


至于为什么修改这些会导致安全风险,当然了。比如构造器,比如你声明 var a = 1,就会构造出一个 Number 的实例,那么如果你的 Number() 构造器被改了,里面给你加上了一些钓鱼链接什么的,不就很尴尬了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题