原生对象(native object)
原生对象也可以叫做本地对象或者内部对象。ECMA-262 把原生对象(native object)定义为 " 独立于宿主环境的 ECMAScript 实现提供的对象 "。所以每一种宿主环境都可以使用原生对象。
JavaScript中的原生对象有Object、Function、Array、String、Boolean、Math、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError和Global。
内置对象(built-in object)
ECMA-262 把内置对象(built-in object)定义为 " 由 ECMAScript 实现提供的、独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现 "。前半部分和原生对象很像,实际上内置对象也都是原生对象,区别在于后半句 "在 ECMAScript程序开始执行时出现",这意味着开发者无需使用new +构造函数创建,而是JavaScript引擎初始化的时候就被创建,可以直接使用。 目前定义的内置对象只有两个:Global 和 Math
内置对象是原生对象的一种,主要区别在于是否需要实例化。在ECMAScript中,不存在独立的函数,所有函数都必须是某个对象的方法。举个例子,在使用原生对象时,我们一般都需要var obj = new Object() 或字面量 var obj = {} 明确实例化生成一个实例再去调用Object的某个方法 obj.toSting()。但如果是内置对象Global和Math,我们只需Math.floor(2.4)直接调用,不需要再进行实例化。
宿主对象(host object)
首先要明确什么是宿主,ECMA仅是一套规范,也就是指定的一套编程规则。但是规则毕竟是规则,如果要发挥作用,必须要有平台或者说环境,这就是ECMA的宿主。
ECMAScript中的 "宿主" 当然就是我们网页的运行环境,即 "操作系统" 和 "浏览器"。所有非原生对象都是宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。
所有的 BOM 和 DOM 对象都是宿主对象,它们都属于window对象的子对象。不同的宿主环境所展示的内容不同。它不是 ECMAScript 官方提供的,而是浏览器这个宿主为了方便开发者而加上去的,所以实际上所有非原生对象都是宿主对象。
文章每周持续更新,可以微信搜索「 前端大集锦 」第一时间阅读,回复【视频】【书籍】领取200G视频资料和30本PDF书籍资料
网友评论