原生对象、内置对象、宿主对象的区别

1、内置(Build-in)对象与原生(Naitve)对象的区别在于:前者总是在引擎初始化阶段就被创建好的对象,是后者的一个子集;而后者包括了一些在运行过程中动态创建的对象。

2、引擎扩展对象是一个并不太大的集合,一般来说比较确定,它们也属于引擎的原生对象(但不属于ECMA规范的原生对象)。

3、宿主对象不是引擎的原生对象,而是由宿主框架通过某种机制注册到JavaScript引擎中的对象。

4、一些宿主会把自己提供的对象/构造器也称为“原生对象”,例如Internet Explorer 7就把它提供的XMLHttpRequest()称为原生的——与此相对的是在它的更早先版本中通过“new ActiveXObject(‘Microsoft.XMLHTTP‘)”这样的方法创建的对象。这种情况下,读者应注意到“宿主的原生对象”与“引擎的原生对象”之间的差异。

一、原生对象

  ECMA-262 把原生对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。

  Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError、ActiveXObject(服务器方面)、Enumerator(集合遍历类)、RegExp(正则表达式)

  由此可以看出,简单来说,原生对象就是 ECMA-262 定义的类(引用类型)。

二、内置对象

  ECMA-262 把内置对象(built-in object)定义为“由 ECMAScript 实现提供的、独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现”。这意味着开发者不必明确实例化内置对象,它已被实例化了。

  同样是“独立于宿主环境”。根据定义我们似乎很难分清“内置对象”与“原生对象”的区别。而ECMA-262 只定义了两个内置对象,即 Global 和 Math (它们也是原生对象,根据定义,每个内置对象都是原生对象)。

  如此就可以理解了。内置对象是原生对象的一种。而其包含的两种对象中,Math对象我们经常用到,可这个Global对象是啥东西呢?

  Global对象是ECMAScript中最特别的对象,因为实际上它根本不存在!在ECMAScript中,不存在独立的函数,所有函数都必须是某个对象的方法。

  类似于isNaN()、parseInt()和parseFloat()方法等,看起来都是函数,而实际上,它们都是Global对象的方法。而且Global对象的方法还不止这些。

三、宿主对象

  何为“宿主对象”? ECMAScript中的“宿主”当然就是我们网页的运行环境,即“操作系统”和“浏览器”。所有非原生对象都是宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。

  所有的 BOM 和 DOM 对象都是宿主对象。因为其对于不同的“宿主”环境所展示的内容不同。其实说白了就是,ECMAScript官方未定义的对象都属于宿主对象,因为其未定义的对象大多数是自己通过ECMAScript程序创建的对象。TML DOM 是 W3C 标准(是 HTML 文档对象模型的英文缩写,Document Object Model for HTML)。

  HTML DOM 定义了用于 HTML 的一系列标准的对象,以及访问和处理 HTML 文档的标准方法。

  通过 DOM,可以访问所有的 HTML 元素,连同它们所包含的文本和属性。可以对其中的内容进行修改和删除,同时也可以创建新的元素。

时间: 2024-08-05 06:48:20

原生对象、内置对象、宿主对象的区别的相关文章

【Unity】3.1 利用内置的3D对象创建三维模型

分类:Unity.C#.VS2015 创建日期:2016-04-02 一.基本概念 Unity已经内置了一些基本的3D对象,利用这些内置的3D对象就可以直接构建出各种3D模型(当然,复杂的三维模型还需要借助专业建模软件来完成). Unity 5.3.4内置的3D对象有: Cube:立方体 Sphere:球体 Capsule:胶囊体. Cylinder:圆柱体. Plane:平面. Quad:四方格. Ragdoll:布娃娃系统. Terrain:地形. Tree:树. Wind Zone:风.

day②:一切皆对象+内置方法+int

一.python基础 对于python,一切事物都是对象,对象基于类创建. 例子: li=[11,22,33] li.append(44) 对象所具备的方法,例如:li列表的增删改查,都不是对象自己所有的,它只是去到这个类里面的方法执行的! 二.数据内型的内置方法 type() 查看对象的类型 dir(类型名) 查看类中提供的所有功能 help(类型名) 查看类中所有详细的功能 help(类型名.功能名) 查看类中某功能的详细 关于dir(),之后,你会看到两边带下划线和不带下划线的方法: __

ES6新特性:Javascript中内置的延迟对象Promise

Promise的基本使用: 利用Promise是解决JS异步执行时候回调函数嵌套回调函数的问题, 更简洁地控制函数执行流程: 通过new实例化Promise,  构造函数需要两个参数, 第一个参数为函数执行成功以后执行的函数resolve, 第二个函数为函数执行失败以后执行的函数reject: new Promise(function(resolve , reject) { }); 通过Promise,我们把回调函数用线性的方式写出来,而不是一层套一层, 这个函数有四层回调: fn("args&

Lucene中内置常用Query对象

以下这几种lucene内置查询对象,不过在实际的项目开发中,这种查询方式应用的不多.一般用QueryParser去获取查询对象.因为QueryParser内部基本实现了所有的内置查询对象. 这是最常见的QueryParse的写法 /** * 通过QueryParser去获取查询对象 * * @throws ParseException */ @Test public void searchByQueryParse() throws ParseException { // 1创建QueryPars

JSP的 内置九大对象

我们以前用到的对象都是用 new 调用构造方法获得的,而在 JSP 中提供了 9 个不需要 new 实例化的对象,我们把它叫做内置对象或者隐藏对象,它们分别是 pageContext.request.response.session.application.config.out.page.exception. 1. request 内置对象 zaiWeb开发中, request 内置对象十分重要,用到的频率很多. request 对象的作用:接收客户端发送来的信息. 它的方法主要有: 2. re

原生APP内置PayPal网页支付方式

不多言,直入正题  快速结账(IOS和android通用,支持paypal支付和信用卡直接支付) 快速结账(Express Checkout)是移动端和网页端通用的接口,可以使用手机浏览器(webview)跳转实现支付. 沙箱环境测试: https://developer.paypal.com/developer/accounts?event=createSuccess 用申请下来的企业帐号登录上面的网站里,申请沙箱测试帐号 <h1>沙箱帐号密码测试</h1>           

js高级---本地对象、内置对象、宿主对象

名词参考: 原生对象:也叫内部对象.本地对象.native object 内置对象:Build-in object 宿主对象:host object ECMA-262 定义: 原生对象:独立于宿主环境的ECMAScript实现提供的对象.与宿主无关,在javascript(远景浏览器).nodejs(node平台).jscript(ie浏览器).typescript(微软平台)等等中均有这些对象.简单来说,本地对象就是 ECMA-262 定义的类(引用类型).在运行过程中动态创建的对象,需要ne

JavaScript 本地对象、内置对象、宿主对象

首先解释下宿主环境:一般宿主环境由外壳程序创建与维护,只要能提供js引擎执行的环境都可称之为外壳程序.如:web浏览器,一些桌面应用系统等.即由web浏览器或是这些桌面应用系统早就的环境即宿主环境. 1.本地对象 ECMA-262 把本地对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象”. 再来看一下,“本地对象”包含哪些内容: Object.Function.Array.String.Boolean.Number.Date.RegExp.Erro

JS中的本地对象,内置对象和宿主对象

首先解释下宿主环境:一般宿主环境由外壳程序创建与维护,只要能提供js引擎执行的环境都可称之为外壳程序.如:web浏览器,一些桌面应用系统等.即由web浏览器或是这些桌面应用系统早就的环境即宿主环境. 本地对象 ECMA-262 把本地对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象”. 再来看一下,“本地对象”包含哪些内容: Object.Function.Array.String.Boolean.Number.Date.RegExp.Error.