在此前的内容中,我讨论的都是JavaScript语言及其规范,而并非该语言的应用环境。在大多数人看来,JavaScript应用环境都是Web浏览器,这也的确是该语言最早的设计目标。然而从很早开始,JavaScript语言就已经在其他的复杂应用环境中使用,并受这些应用环境的影响而发展新的语言特性了 。

JavaScript的应用环境,主要由宿主环境与运行期环境构成。其中,宿主环境是指外壳程序(Shell)和Web浏览器等,而运行期环境则是由JavaScript引擎内建的。图1-8说明由它们共同构建的对象编程系统的基本结构:

图1-8  由宿主与运行期构成的应用环境

1.5.1  宿主环境(host environment)

JavaScript是一门设计得相对“原始”一点点的语言,它被创生时的最初目标仅仅是为Netscape提供一个在浏览器与服务器间都能统一使用的开发语言。简单地说,它原来是想让B/S架构下的开发人员用起来都舒服那么一点点的。这意味着最初的设计者希望JavaScript语言是跨平台的,能够提供“端到端(side to side)”的整体解决方案。

然而事实上这非常难于做到,因为不同的平台提供的“可执行环境”不同。而宿主环境就是为了隔离代码、语言与具体的平台而提出的一个设计。一方面我们不能让浏览器上拥有一个巨大无比的运行期环境(例如像虚拟机那么大),另一方面服务器端又需要一个较强大的环境,因此JavaScript就被设计成了需要“宿主环境”的语言 。

ECMAScript规范并没有对宿主环境提出明确的定义。比如说,它没有提出标准输入输出(stdin、stdout)需要确切地实现在哪个对象中。为了弥补这个问题,RWC在WebAPIs规范中首先就提出了“需要一个Window对象”的浏览器环境。这意味着在RWC或者浏览器端,是以Window对象及其中的Document对象来提供输入输出的。

但这仍然不是全部的真相。因为“RWC规范下的宿主环境”,并不等同于“JavaScript规范下的宿主环境”。本书并不打算讨论与特定浏览器相关的细节问题,因此我们事实上在说的是JavaScript的一个公共语言环境,或者说公共的宿主环境的定义。作为程序运行过程中对输入输出的基本要求,本书设定宿主环境在全局应当支持如表1-3所示的方法:
表1-3  本书对宿主环境在全局方法上的简单设定

方法

含义

alert(sMessage)

显示一个消息文本(字符串),并等待用户一次响应。调用者将忽略响应的返回信息

write(sText, ...)

输出一个段文本,多个参数将被连接成单个字符串文本

(*注1)

writeln(sText, ...)

(同write,)输出一段文本,多个参数将被连接成单个字符串文本。并在文本未尾追加一个换行符(\n)

*注1:write()与writeln()在浏览器中是Document对象的方法。为遵循这一惯例,在本书的所有测试范例中并不直接使用这两个方法。但这里保留了它们,以描述宿主环境的标准输入输出。

对于不同的宿主来说,这些方法依赖于不同的对象层次的“顶层对象(或全局对象)”。例如浏览器宿主依赖于Window对象,而WSH宿主则依赖于WScript对象。但在本书中,调用这些方法时将略去这个对象。因此,至少它看起来很像是Global对象上的方法(事实上,大多数的宿主默认“顶层对象”不需要使用全名的约定)。

下面的代码说明在具体的宿主环境中如何实现本书所适用的alert()方法。例如:

// 示例1: .NET Framework中的JScript 8.0,(当前的)顶层对象取决于import语句
// (注: JScript.NET中的脚本需要编译执行)
import System.Windows.Forms;
function alert(sMessage) {
MessageBox.Show(sMessage);
}
alert('Hello, World!')

// 示例2:浏览器环境中使用的顶层对象是window
alert('Hello, World!');

// 示例3:WSH环境中使用的顶层对象是WScript, 但必须使用全名
function alert(sMessage) {
WScript.Echo(sMessage);
}
alert('Hello, World!');

宿主环境(host environment)的更多相关文章

  1. hostingEnvironment与宿主环境

    定义用来控制应用程序宿主环境的行为的配置设置. 配置如下 <hostingEnvironment idleTimeout="HH:MM:SS" shadowCopyBinAs ...

  2. ASP.NET Web API WebHost宿主环境中管道、路由

    ASP.NET Web API WebHost宿主环境中管道.路由 前言 上篇中说到ASP.NET Web API框架在SelfHost环境中管道.路由的一个形态,本篇就来说明一下在WebHost环境 ...

  3. ASP.NET Web API Selfhost宿主环境中管道、路由

    ASP.NET Web API Selfhost宿主环境中管道.路由 前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这 ...

  4. Velocity魔法堂系列三:模板与宿主环境通信

    一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...

  5. 微信小程序开发8-小程序的宿主环境(1)

    1.小程序的运行环境分成渲染层和逻辑层,第2章提到过 WXML 模板和 WXSS 样式工作在渲染层,JS 脚本工作在逻辑层.小程序的渲染层和逻辑层分离是经过很多考虑得出来的模型 2. 1.渲染层和数据 ...

  6. javascript的宿主环境

    关于javascript语言,最有意思的是它必须要在一个宿主环境中运行,其中受欢迎的宿主环境当然就是浏览器了,但这并不是我们唯一的选择, javascript完全可以运行在服务器端,桌面以及富媒体环境 ...

  7. 微信小程序开发:学习笔记[7]——理解小程序的宿主环境

    微信小程序开发:学习笔记[7]——理解小程序的宿主环境 渲染层与逻辑层 小程序的运行环境分成渲染层和逻辑层. 程序构造器

  8. 微信小程序---宿主环境

    (1)宿主环境 我们称微信客户端给小程序所提供的环境为宿主环境.小程序借助宿主环境提供的能力,可以完成许多普通网页无法完成的功能.之前把小程序涉及到的文件类型阐述了一遍,接下来结合demo项目来讲一下 ...

  9. [Docker] Windows 宿主环境下,共享或上传文件到容器的方法

    需求如题. 解决方案1 - 挂载目录(适用于创建新的容器) 格式-v 容器目录 或 -v 本地目录:容器目录 范例Linux宿主环境下:使用镜像 nginx:latest,以后台模式启动一个容器,将容 ...

随机推荐

  1. POJ 1222 EXTENDED LIGHTS OUT(高斯消元解XOR方程组)

    http://poj.org/problem?id=1222 题意:现在有5*6的开关,1表示亮,0表示灭,按下一个开关后,它上下左右的灯泡会改变亮灭状态,要怎么按使得灯泡全部处于灭状态,输出方案,1 ...

  2. MYSQL语句:创建、授权、查询、修改、统计分析等 一 用户的创建、权限设置、删除等

    MYSQL语句:创建.授权.查询.修改.统计分析.. 一.用户的创建.权限设置.删除等 1.首先链接MySQL操作 连接格式:mysql -h 主机地址 -u 用户名 -p 用户密码 (注-u与roo ...

  3. Linux——用户管理简单学习笔记(四)

    主要讲两个用户管理的案例: 1: 限制用户su为root,只允许某个组的的用户su # groupadd sugroup 首先添加我们的用户组 # chmod 4550 /bin/su 改变命令的权限 ...

  4. 强大的Manage

    Queue和Pipe实现的数据共享方式只支持两种结构 Value 和 Array.Python中提供了强大的Manage专门用来做数据共享,其支持的类型非常多,包括: Value,Array,list ...

  5. package 'orocos-bfl' not found CMake Error at /usr/share/cmake-2.8/Modules/FindPkgConfig.cmake:283 (message):

    #没有数字 sudo apt-get install ros-indigo-bfl

  6. 对不队——Alpha冲刺

    第五天  日期:2018/6/20 一. 今日完成任务:专家审稿逻辑的开发 冯晓.马思远:会议网站栏目管理开发,软件功能测试 王爽.彭辉:审稿管理员分稿和稿件查找功能开发,博客撰写 吴琼.郝延婷:更换 ...

  7. C++学习笔记(二)——交换函数(swap)

    这次我们要透过一个简单的函数swap深入理解函数传参的本质以及在C++中如何选择传参方式. 先来看第一段程序: void swap(int x, int y) { int temp = y; y = ...

  8. Codeforces 919D - Substring

    919D - Substring 思路: 拓扑排序判环+DAG上dp+记忆化搜索 状态:dp[i][j]表示以i为起点的路径中j的最大出现次数 初始状态:dp[i][j]=1(i have no so ...

  9. 记录Vmware Workstation及Centos6.8 的安装

    网上找到的一个非常详细的安装详解.个人觉得非常好.于是加保存一下.地址:http://www.mamicode.com/info-detail-1462939.html

  10. English trip -- VC(情景课)4 B Parts of the body 身体部位

    xu言: ... Words eye  读音同 I     眼睛 nose 鼻子 ear   耳朵 tooth  牙齿 mouth  嘴 hair 头发 eyebrow  眉毛 cheek  脸颊 n ...