宿主环境(host environment)
在此前的内容中,我讨论的都是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语句 // 示例2:浏览器环境中使用的顶层对象是window // 示例3:WSH环境中使用的顶层对象是WScript, 但必须使用全名 |
宿主环境(host environment)的更多相关文章
- hostingEnvironment与宿主环境
定义用来控制应用程序宿主环境的行为的配置设置. 配置如下 <hostingEnvironment idleTimeout="HH:MM:SS" shadowCopyBinAs ...
- ASP.NET Web API WebHost宿主环境中管道、路由
ASP.NET Web API WebHost宿主环境中管道.路由 前言 上篇中说到ASP.NET Web API框架在SelfHost环境中管道.路由的一个形态,本篇就来说明一下在WebHost环境 ...
- ASP.NET Web API Selfhost宿主环境中管道、路由
ASP.NET Web API Selfhost宿主环境中管道.路由 前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这 ...
- Velocity魔法堂系列三:模板与宿主环境通信
一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...
- 微信小程序开发8-小程序的宿主环境(1)
1.小程序的运行环境分成渲染层和逻辑层,第2章提到过 WXML 模板和 WXSS 样式工作在渲染层,JS 脚本工作在逻辑层.小程序的渲染层和逻辑层分离是经过很多考虑得出来的模型 2. 1.渲染层和数据 ...
- javascript的宿主环境
关于javascript语言,最有意思的是它必须要在一个宿主环境中运行,其中受欢迎的宿主环境当然就是浏览器了,但这并不是我们唯一的选择, javascript完全可以运行在服务器端,桌面以及富媒体环境 ...
- 微信小程序开发:学习笔记[7]——理解小程序的宿主环境
微信小程序开发:学习笔记[7]——理解小程序的宿主环境 渲染层与逻辑层 小程序的运行环境分成渲染层和逻辑层. 程序构造器
- 微信小程序---宿主环境
(1)宿主环境 我们称微信客户端给小程序所提供的环境为宿主环境.小程序借助宿主环境提供的能力,可以完成许多普通网页无法完成的功能.之前把小程序涉及到的文件类型阐述了一遍,接下来结合demo项目来讲一下 ...
- [Docker] Windows 宿主环境下,共享或上传文件到容器的方法
需求如题. 解决方案1 - 挂载目录(适用于创建新的容器) 格式-v 容器目录 或 -v 本地目录:容器目录 范例Linux宿主环境下:使用镜像 nginx:latest,以后台模式启动一个容器,将容 ...
随机推荐
- C#创建继承的窗体
http://blog.csdn.net/chenyujing1234/article/details/7555369 关键技术 基窗体,实质上相当于面向对象编程中提到的基类,而继承窗体则是子类或派生 ...
- 【TCP/IP详解 卷一:协议】第十七章 TCP:传输控制协议
本章作为TCP的入门章节,简单的概述了一些TCP的知识,和TCP数据报的首部格式. TCP 最重要的特性:reliable. 17.1 引言 本章介绍的是 TCP为应用层提供的服务. 17.2 TCP ...
- JDK tools之jps和jstack诊断Java程序
大部分Java开发者可能知道有这么个工具,但是没怎么用过,每次还得百度一下.我也是之一 -_-!!. 每次遇到
- python pandas demo
1. import pandas as pd web_stats = {,,,,,], ,,,,,], ,,,,,]} df = pd.DataFrame(web_stats) print(df.he ...
- 获取本机ip的shell脚本
ifconfig br0 | grep 'inet addr' | sed 's/^.*addr://g' |sed 's/ Bcast:.*$//g' 注意:br0为网卡名称,需要改成你使用的网卡名 ...
- Qt5.3.2(VS2010)_调试_遇到的问题
1.(20171124)调试程序 的时候,一直卡住,看到 右下角的进度里面,一直是"Launching Debugger"的状态 ZC: 一直找不到 原因... 尝试了 32位/6 ...
- 对不队—— Alpha冲刺
第三天 日期:2018/6/18 一. 今日完成任务:会议内容管理部分 冯晓.马思远:会议网站栏目管理开发,博客撰写 王爽.彭辉:参会人员管理开发 吴琼.郝延婷:审稿专家管理开发 1.1会议管理界面 ...
- jq 插入结构
一.插入 1. append $("#div").append('<a href="baidu.com">a</a>') ; // ...
- 解决dos窗口乱码问题
大家有没有遇到这样的情况,看着就糟心 打开dos窗口, 输入命令 chcp 936 (936表示中文编码GBK, 也可以设置其他编码), 回车一下执行. 鼠标右键 -> 属性 (关键一步): ...
- 滑动窗口解决Substring Search Problem
2018-07-18 11:19:19 一.Minimum Window Substring 问题描述: 问题求解: public String minWindow(String s, String ...