使命召唤6提示错误 今天提示this buil...

本文由 翻译自《 》这篇文章。文中列举了一些将在下一代JavaScript中出现的令人兴奋的特性,译者还加上了自己的一些理解,非常值得一读。文章内容如下:
我相信,在ECMAScript.next到来的时候,我们现在每天都在写的JavaScript代码将会发生巨大的变化。2013年将会是令JavaScript开发者们兴奋的一年,越来越多的特性提案将被最终敲定,新一版本的JavaScript将会慢慢得到普及。
本文中,我将会讲几个我个人很期待的,希望能在2013年或者更晚一点使用上的新特性。
ES.next目前的实现情况
可以通过查看Juriy Zaytsev总结的 ,和Mozilla的ES6 页面以及通过使用现代浏览器的最新版本(比如 、 ),来了解目前有哪些已经实现了的ES.next特性。
在Canary中,记得要进入chrome://flags打开“启用实验性JavaScript”选项以激活所有最新的的JavaScript特性。
另外,许多ES.next特性还可以通过使用Google的 转换编译器( 有一些单元测试的例子)来体验,以及一些shim项目比如 和 ,也实现了不少新特性。
在Node.js(V8)中使用--harmony命令行选项可以开启一些试验性质的ES.next特性,包括块级作用域,WeakMap等等。
我们已经习惯了将我们的代码分割成为更加便于管理的功能块。在ES.next中,一个模块(module)是就是一个module声明,以及包含在该声明中的一组代码。模块可以用内联方式(inline)声明,也可以引入一个外部的模块文件。一个名为Car的内联模块的写法大致如下:
module Car {
// 导入 …
// 导出 …
一个模块实例就是一个被求过值的模块,它已经被链接到了其他的模块身上或者已经有了词法上的封装数据.下面是一个模块实例的例子:
module myCar at &car.js&;
module声明可以使用在如下上下文中:
module UniverseTest {};
module Universe { module MilkyWay {} };
module MilkyWay = &Universe/MilkyWay&;
module SolarSystem = Universe.MilkyWay.SolarS
module MySystem = SolarS
一个export声明声明了一个可以被其他模块看到的局部函数或变量.
module Car {
// 内部变量
var licensePlateNo = &556-343&;
// 暴露到外部的变量和函数
export function drive(speed, direction) {
console.log(&details:&, speed, direction);
export module engine{
export function check() { }
export var miles = 5000;
export var color = &silver&;
一个模块可以使用import导入任何它所需要的其他模块.导入模块会读取被导入模块的所有可导出数据(比如上面的drive(), miles等),但不能修改它们.导出的变量或函数可以被重命名.
再次用到上面导出相关的例子,我们现在可以有选择性的导入一些模块中的功能.
比如我们可以导入drive():
import drive from C
还可以可以同时导入drive()和miles:
import {drive, miles} from C
下面,我们要讲一下模块加载器API的概念.模块加载器能够让我们动态的加载所需要的脚本.类似于import, 我们可以使用被导入模块中的所有用export声明过的东西.
// Signature: load(moduleURL, callback, errorCallback)
Loader.load(&car.js&, function(car) {
console.log(car.drive(500, &north&));
}, function(err) {
console.log(&Error:& + err);
load()接受三个参数:
moduleURL: 表示一个模块URL的字符串 (比如 &car.js&)
callback: 一个回调函数,接受模块加载,编译,以及执行后的输出结果
errorCallback: 一个回调函数,在加载或编译期间发生错误时调用
关于类(class)
我不打算在本文中过多的讲ES.next中的 ,如果你想知道类和模块将会有什么联系,Alex Russell曾经写过一个很好的 来说明这件事.
JavaScript中有了类,并不意味着要把JavaScript变成Java.ES.next中的类只是我们已经熟悉的语义(比如函数,原型)的另外一种声明方式。
下面是用来定义一个widget的ES.next代码:
module widgets {
class DropDownButton extends Widget {
constructor(attributes) {
super(attributes);
this.buildUI();
buildUI() {
this.domNode.onclick = function(){
下面是去糖(de-sugared)后的做法,也就是我们目前正在使用的方法:
var widgets = (function(global) {
function DropDownButton(attributes) {
Widget.call(this, attributes);
this.buildUI();
DropDownButton.prototype = Object.create(Widget.prototype, {
constructor: { value: DropDownButton },
value: function(e) {
this.domNode.onclick = function(e) {
ES.next的写法的确让代码变的更可读.这里的class也就相当于是function,至少是做了目前我们用function来做的一件事.如果你已经习惯并且也喜欢用JavaScript中的函数和原型,这种未来的语法糖也就不用在意了.
这些模块如何和AMD配合使用?
ES.next中的模块是朝着正确的方向走了一步吗?也许是吧.我自己的看法是:看相关的规范文档是一码事,实际上使用起来又是另一码事.在 , 和 中可以体验新的模块语法,你会非常容易的熟悉这些语法,该语法可能会觉得有点像Python的感觉(比如import语句).
我认为,如果一些功能有足够广泛的使用需求(比如模块),那么平台(也就是浏览器)就应该原生支持它们.而且,并不是只有我一个人这么觉得. James Burke,发明了AMD和RequireJS的人,也曾经说过:
我想,AMD和RequireJS应该被淘汰了.它们的确解决了一个实际存在的问题,但更理想的情况是,语言和运行环境应该内置类似的功能.模块的原生支持应该能够覆盖RequireJS 80%的使用需求,从这一点上说,我们不再需要使用任何用户态(userland)的模块加载库了,至少在浏览器中是这样.
不过James的质疑是ES.next的模块是否是一个足够好的解决方案,他曾在六月份谈到过自己关于ES.next中模块的一些想法
以及再后来的一篇文章 .
Isaac Schlueter前段时间也写过一些自己的想法,讲到了ES6的模块有哪些 .尝试一下下面这些选项,看看你的想法如何.
兼容目前引擎的Module实现
Object.observe()
通过 ,我们可以观察指定的对象,并且在该对象被修改时得到通知.这种修改操作包括属性的添加,更新,删除以及重新配置.
属性观察是我们经常会在MVC框架中看到的行为,它是数据绑定的一个重要组件,AngularJS和Ember.js都有自己的解决方案.
这是一个非常重要的新功能,它不仅比目前所有框架的同类实现性能要好,而且还能更容易的观察纯原生对象.
// 一个简单的对象可以作为一个模块来使用
var todoModel = {
label: &Default&,
completed: false
// 我们观察这个对象
Object.observe(todoModel, function(changes) {
changes.forEach(function(change, i) {
console.log(change);
哪个属性被改变了? change.name
改变类型是什么? change.type
新的属性值是什么? change.object[change.name]
// 使用时:
todoModel.label = &Buy some more milk&;
label属性被改变了
改变类型是属性值更新
当前属性值为&Buy some more milk&
pleteBy = &01/01/2013&;
completeBy属性被改变了
改变类型是属性被添加
当前属性值为&01/01/2013&
completed属性被改变了
改变类型是属性被删除
当前属性值为undefined
Object.observe马上将会在Chrome Canary中实现(需要开启&启用实验性JavaScript&选项).
兼容目前引擎的Object.observe()实现
可以实现类似的功能,但它并不是实现Object.observe的polyfill或shim
Rick Waldron的 有关于Object.observe更详细的介绍.( 译者注:Firefox很早就有了一个类似的东西: )
默认参数值
(Default parameter values)的作用是:在一些形参没有被显式传值的情况下,使用默认的初始化值来进行初始化.这就意味着我们不再需要写类似options = options || {};这样的语句了.
该语法形式就是把一个初始值赋值给对应的形参名:
function addTodo(caption = &Do something&) {
console.log(caption);
addTodo(); // Do something
拥有默认参数值的形参只能放在形参列表的最右边:
function addTodo(caption, order = 4) {}
function addTodo(caption = &Do something&, order = 4) {}
function addTodo(caption, order = 10, other = this) {}
已经实现该特性的浏览器: Firefox 18+( 译者注:Firefox 15就已经实现了默认参数值,作者所说的18只是说18支持,并不是说18是第一个支持的版本.包括本文下面将要提到的chrome 24+等等,都有这个问题.)
块级作用域
块级作用域引入了两种新的声明形式,可以用它们定义一个只存在于某个语句块中的变量或常量.这两种新的声明关键字为:
let: 语法上非常类似于var, 但定义的变量只存在于当前的语句块中
const: 和let类似,但声明的是一个只读的常量
使用let代替var可以更容易的定义一个只在某个语句块中存在的局部变量,而不用担心它和函数体中其他部分的同名变量有冲突.在let语句内部用var声明的变量和在let语句外部用var声明的变量没什么差别,它们都拥有函数作用域,而不是块级作用域.
译者注:以防读者看不懂,我用一个例子解释一下上面的这句话,是这样的:
let(var1 = 1) {
alert(var1);
//弹出1,var1是个块级作用域变量
var var2 = 2;
var var3 = 3;
alert(var2);
//弹出2,虽然var2是在let语句内部声明的,但它仍然是个函数作用域内的变量,因为使用的是var声明
alert(var3);
alert(var1);
//抛出异常
var x = 8;
var y = 0;
let (x = x+10, y = 12) {
console.log(x+y); // 30
console.log(x + y); // 8
实现let的浏览器: Firefox 18+, Chrome 24+
实现const的浏览器: Firefox 18+, Chrome 24+,
Safari 6+, WebKit, Opera 12+
译者注:Firefox很久以前就支持了 和 ,但这两个旧的实现都是依据了当年的 草案.和目前的ES6草案有些区别,比如ES4中用const声明的常量并没有块级作用域(和var一样,只是值不可变),let也有一些细微差别,就不说了.由于很少人使用旧版的Firefox(但我的主浏览器是FF3.6!),即使未来ES6和ES4中的一些东西有冲突,我们基本也可以忽略.
我想大部分读者已经熟悉了映射的概念,因为我们过去一直都是用纯对象来实现映射的. 允许我们将一个值映射到一个唯一的键上,然后我们就可以通过这个键获取到对应的值,而不需要担心用普通对象实现映射时因原型继承而带来的问题.
使用set()方法,可以在map中添加一个新的键值对,使用get()方法,可以获取到所存储的值.Map对象还有其他三个方法:
has(key) : 一个布尔值,表明某个键是否存在于map中
delete(key) : 删除掉map中指定的键
size() : 返回map中键值对的个数
let m = new Map();
m.set(&todo&, &todo&.length);
// &todo& → 4
m.get(&todo&);
m.has(&todo&);
m.delete(&todo&);
m.has(&todo&);
已经实现Map的浏览器: Firefox 18+
Nicholas Zakas的 有关于Map更详细的介绍.
兼容目前引擎的Map实现
( 译者注:尼古拉斯的这篇文章《 》中显示,10月份的ES6草案中,Map.prototype.size和Set.prototype.size都从size()方法改成size访问器属性了.同时Map对象新添加的方法还有很多,clear()用来清空一个map,forEach()用来遍历一个map,还有items(),keys(),values()等.Set对象也类似,有不少作者没提到的方法,下面的Set小节我就不指出了.)
另外,在ES5中,在把对象当成映射来使用的时候,为了防止原型继承带来的问题(比如在twitter中,@__proto__能让浏览器卡死),可以用var hash = Object.create(null)代替var hash = {};
正如Nicholas Zakas在他的文章中所说,对于那些接触过Ruby和Python等其他语言的程序员来说, 并不是什么新东西,但它的确是在JavaScript中一直都缺少的特性.
任何类型的数据都可以存储在一个set中,但每个值只能存储一次(不能重复).利用Set可以很方便的创建一个不包含任何重复值的有序列表.
add(value) – 向set中添加一个值.
delete(value) – 从set中删除value这个值.
has(value) – 返回一个布尔值,表明value这个值是否存在于这个set中.
let s = new Set([1, 2, 3]);
// s有1, 2, 3三个元素.
s.has(-Infinity);
s.add(-Infinity);
// s有1, 2, 3, -Infinity四个元素.
s.has(-Infinity);
s.delete(-Infinity);
s.has(-Infinity);
Set对象的一个作用是用来降低过滤操作(filter方法)的复杂度.比如:
function unique(array) {
var seen = new S
return array.filter(function (item) {
if (!seen.has(item)) {
seen.add(item);
这个利用Set来进行数组去重的函数的复杂度为O(n).而其他现有数组去重方法的复杂度几乎都为O(n^2).
已经实现Set的浏览器: Firefox 18, Chrome 24+.
Nicholas Zakas的 有关于Set更详细的介绍.
兼容目前引擎的Set实现
译者注:参考尼古拉斯的这篇文章:《 》,如果让我来实现一个ES6下的数组去重函数的话,我会这么写:
function unique(array) {
return [v for(v of Set(array))]
该函数使用到了ES6中的 遍历,以及 .不过效率比上面使用filter去重的方法稍微差点.Firefox最新版中已经可以执行这个函数.
另外,借助于下面将会提到的Array.from方法,还有更简单高效的写法:
&Array.from(new Set([ 1, 1, 2, 2, 3, 4 ]));
甚至,借助于ES6中的 (spread)操作,还有可能这样实现:
&[ ... new Set([ 1, 1, 2, 2, 3, 4 ]) ];
的键只能是个对象值,而且该键持有了所引用对象的弱引用,以防止内存泄漏的问题.这就意味着,如果一个对象除了WeakMap的键以外没有任何其他的引用存在的话,垃圾回收器就会销毁这个对象.
WeakMap的另外一个特点是我们不能遍历它的键,而Map可以.
let m = new WeakMap();
m.set(&todo&, &todo&.length);
// 异常,键必须是个对象值!
// TypeError: Invalid value used as weak map key
m.has(&todo&);
// 同样异常!
// TypeError: Invalid value used as weak map key
let wmk = {};
m.set(wmk, &thinger&);
// wmk → &thinger&
m.get(wmk);
// &thinger&
m.has(wmk);
m.delete(wmk);
m.has(wmk);
已经实现WeakMap的浏览器: Firefox 18+, Chrome 24+.
兼容目前引擎的WeakMap实现
Nicholas Zakas的 有关于WeakMap更详细的介绍,或参考我的译文《 》
代理(Proxy)API允许你创建一个属性值在运行期间动态计算的对象.还可以利用代理API&钩入&其他的对象,实现例如打印记录和赋值审核的功能.
var obj = {foo: &bar&};
var proxyObj = Proxy.create({
get: function(obj, propertyName) {
return &Hey, &+ propertyN
console.log(proxyObj.Alex); // &Hey, Alex&
可以看看Nicholas Zakas的 和 .
实现代理API的浏览器: Firefox 18+, Chrome 24+
译者注:作者不知道的是,一共有过两个代理API的提案,一个是旧的 ,一个是新的 (Direct Proxies).前者已被废弃.两者的区别在 .V8(Chrome和Node.js)实现的是前者,Firefox18及之后版本实现的是 (17及之前版本实现的是 ).尼古拉斯在2011年写的文章也应该是过时的.
一些新的API
Object.is是一个用来比较两个值是否相等的函数.该函数和===最主要的区别是在对待特殊值NaN与自身以及正零与负零之间的比较上.Object.is的判断结果是:NaN与另外一个NaN是相等的,以及+0和-0是不等的.
Object.is(0, -0); // false
Object.is(NaN, NaN); // true
0 === -0; // true
NaN === NaN; // false
实现了Object.is的浏览器: Chrome 24+
兼容目前引擎的Object.is实现
译者注:Object.is方法和严格相等===运算符的区别体现在ES标准内部就是 和 的区别.如果我没有理解错这条 的话,Object.is要改名成为Object.sameValue了.
Array.from
Array.from: 将参数中的类数组(array-like)对象(比如arguments, NodeList, DOMTokenList (classList属性就是这个类型), NamedNodeMap (attributes属性就是这个类型))转换成数组并返回,比如转换一个纯对象:
Array.from({
0: &Buy some milk&,
1: &Go running&,
2: &Pick up birthday gifts&,
再比如转换一个DOM节点集合:
var divs = document.querySelectorAll(&div&);
Array.from(divs);
// [&div class=&some classes& data-info=&12&&&/div&, &div data-info=&10&&&/div&]
Array.from(divs).forEach(function(node) {
console.log(node);
兼容目前引擎的Array.from实现
译者注:从作者举的两个例子可以看出,Array.from基本相当于目前使用的[].prototype.slice.call.
目前的草案也的确是这样规定的,但从Rick Waldron(TC39成员)在原文评论中 可以看出,也许Array.from未来也能将Set对象(非类数组对象,但可迭代)转换成数组.
译者注:除了这两个API,还有很多个新添加的API,比如Number. 、 、 、 、String.prototype. 、
下面给出两个很有用的链接:
Mozilla正计划实现的ES6特性:
ES6目前的所有特性提案:
ES.next中添加了许多被认为是JavaScript中缺失已久的新特性.虽然ES6规范计划在2013年年底发布,不过浏览器们已经开始实现其中的一些特性了,这些特性被广泛使用也只是时间问题了.
在ES6完全实现之前,我们可以使用一些转换编译器(transpiler)或者shim来体验其中一些特性.
译者注:目前最强大的ES6实现应该是Brandon Benvie写的 (见《 》),这是一个JavaScript虚拟机,也就是用JavaScript(ES3)实现的JavaScript(ES6)引擎,它未来甚至可以工作在IE6上.目前实现的ES6特性有:模块以及模块加载器API,直接代理,生成器,解构,@symbols等等.
想要查看更多的例子和了解最新的信息,可以去 ,该站点由Dave Herman和其他一些EC39成员维护( 译者注:该新站仍在建设中,应该访问 ).其中包含了下一代JavaScript中将要有的所有新特性.
激动人心的时刻马上就要到来了!
译者注:文本中提到的知识点仅仅是ES6中新知识的一小部分,而且明显作者自己也有点赶不上草案的快速变化(本文中提到的所有知识点都有可能在明天就发生变化).所以本文的内容仅仅是个开始,原文中的外部连接加上我给出的外部链接才是最需要你关注的。
投递这篇资讯
资讯来源:
相关 [下一代 javascript 中将] 推荐:
- ITeye资讯频道
本文由 紫云飞翻译自《 A Few New Things Coming To JavaScript》这篇文章. 文中列举了一些将在下一代JavaScript中出现的令人兴奋的特性,译者还加上了自己的一些理解,非常值得一读. 我相信,在ECMAScript.next到来的时候,我们现在每天都在写的JavaScript代码将会发生巨大的变化. 2013年将会是令JavaScript开发者们兴奋的一年,越来越多的特性提案将被最终敲定,新一版本的JavaScript将会慢慢得到普及. 本文中,我将会讲几个我个人很期待的,希望能在2013年或者更晚一点使用上的新特性. ES.next目前的实现情况. 可以通过查看Juriy Zaytsev总结的 ECMAScript 6兼容性表格,和Mozilla的ES6 实现情况页面以及通过使用现代浏览器的最新版本(比如 Chrome Canary、 Firefox Aurora),来了解目前有哪些已经实现了的ES.next特性.
- never-online - 黑客志
Traceur项目旨在让你预先体验还处于草案阶段的下一代Javascript语言新特性,并根据实际运行的代码来提供反馈,帮助标准制定. 要体验Traceur非常简单,只需要在你的HTML文件头部包含两个js文件即可:. traceur.js是编译器,bootstrap.js则负责将所有script标签中的脚本编译为当前浏览器可执行的Javascript,如果不想这么麻烦,你也可以直接通过这个在线模拟器来体验. 目前Traceur支持以下新的语言特性,每个都十分令人期待:. Traits,traits特性让你可以将一组方法打包起来,然后混入一个或多个类中,类似Ruby语言中的mixin功能. Modules,Modules主要用来解决模块依赖和部署问题,让你可以有选择的从外部模块导入指定的部分.
- Jia - NoSQLFan
本文来自Hadoop Summit大会的一个演讲稿,主讲是Hadoop核心开发团队的Arun C Murthy (@acmurthy),同时他也是Yahoo!刚刚剥离的Hadoop独立公司Hortonworks的 Founder和架构师. 演讲中他讲述了现在的Hadoop存在的一些问题和集群上限,并展望了下一代Hadoop和其MapReduce将会得到的巨大提升. 来自Berlin Buzzwords 大会的Hadoop介绍PPT. Hadoop Map-Reduce 实例的 Ruby 实现. MongoDB+Hadoop构建MapReduce运算系统. Mongodb Mapreduce 初窥.
- openboy - Wow! Ubuntu
TermKit 是由 Steven Wittens 为 MacOS X 编写的一个很有趣的项目,可以称之为下一代的富媒体终端. 它可以在终端中用图形化元素来显示命令结果,比如图标等等. 现在有人对此项目进行了 fork ,把它移植到了 Ubuntu 平台上,但没有原生程序,只能运行在 Chromium/Chrome 中,有兴趣的话你可以尝试一下. # Ubuntu 上安装 (详见这里,我在 Ubuntu 11.04 上安装运行成功). 最后在 Chromium/Chrome 中打开 http://localhost:2222 就可以使用了. # 本文采用CC协议进行授权,转载本文请注明本文链接.
感谢胖鱼网 palmjoy的投递. 我们现在看到没有物理键盘的webos手机前期预览图了,虽然现在pre3是开发的重中之重,但是下一代webos已经开始着手策划,现在已经8月了,不知道有木有webos粉丝和我一样对webos既pre3之后的手机有所期待呢.
- 阿朱=行业趋势+开发管理+架构
很多企业CIO亲手经历的项目是局域网内的C/S技术,技术构成很简单,后端是关系数据库(一般是SQLSERVER,高级点的是Oracle),客户端一般是VB/PB/DELPHI来写(高级点有人用.NET WinForm来写). 再复杂点的还有曾经流行的微软COM技术,用DELPHI写COM组件. 再复杂点的再加一个数据上传、系统调用整合的中间件. 再往后走,就是B/S系统了,这一下把技术门槛给拉了一个档次. 不仅这个阶段的应用也从单系统变成系统间更多业务关联的ERP,技术也变成HTML/JS/CSS、IIS/Apache、WebLogic/JBOSS/Tomcat、RedHat. 而且平台也拉了一个档次开始有了工作流引擎、消息引擎、预警引擎、缓存、日志、异常、安全、集成、查询分离、负载均衡、双机热备等等,还有一揽子商业智能所需要的ETL/DW/图表/交叉表/切片上钻下钻旋转.
- wuwu - 弯曲评论
由于版面及内容形式等因素限制,文章在报纸上分3期共10个版进行连载. 本文是在连载结束后,重新调整了内容框架,修正、更新了一部分文字而成,看起来更像是一个完整的内容专题. 尤其是对13家厂商的采访部分,除了错别字和极个别不妥当的措辞或叙述外,未再做其他修改. 文章撰写过程中,得到了许多来自咨询机构、厂商、学术界的朋友的大力支持,在此表示感谢. 同时也要感谢我的同事,是她们的努力使得专题内容得以按时发布. 最后,我必须感谢一下我的太太,她为专题做了许多资料翻译工作,并在撰写过程中为我创造了良好的工作环境. 水平所限,文中多有待商榷之处,请不吝赐教. 希望这一专题内容能抛砖引玉,引发更多有价值的讨论.
- LooKing - 大家都叫我老杨
今天收到evernote的邮件,说是“Study Smater with Evernote Partners and Tools”,里面提到一种叫做smartpen的电子笔,Evernote介绍说,这个smartpen可以. 应该是一种类似电子记事笔之类的东西吧. 点进去这个smartpen的主页 /en-us/,网站标题很有霸气,叫做Never Miss A word,下面有几个视频连接,分别介绍这个Echo smartpen,它的用法以及不同行业的人使用后的新的体会. 从产品介绍可以看到,这支笔可以和电脑连接,有一个OLED的显示屏,可以录音和放音,还有一定的存储空间.
- yuza - 爱范儿 · Beats of Bits
周一 ifanr 参加了由渣打银行举行的《极客——让银行转型》博主论坛. 各位与会博主精彩的提问带领我们共同展开对银行业务创新,特别是科技创新所带动的银行转型的思考. Jeff——渣打银行渠道创新总监,分享了 Scrum 理念为渣打银行带来的改变. Breeze Living 是渣打银行在中国地区首先推出的一个优惠券分享程序,借助现实增强技术以抓风筝的形式. iOS 版已经推出、Android 版将在年底到来. 渣打银行内部负责 Breeze Living 构思的团队仅有六人,具体的开发实现由 Mobile Now 完成. Jeff 强调的 Scrum 周期一般为 2-4 周. 这意味着,一个新功能的实现只需要短短 2-4 个星期.
- fyits0 - Solidot
Shawn the R0ck 写道 &随着NGFW(Next generation firewall)从几年前的概念转变为今天的现实,计算机世界最近发表了一篇竞速下一代防火墙的对各个厂商产品的介绍性文章,其中包括总部设在美国西海岸的Palo Alto Networks和SonicWall,著名的以色列安全厂商Check Point,以及国内已经推出NFGW产品的深信服和梭子鱼. 抛开概念不说,从实际的功能来看,NFGW其实就是加强版的UTM,把传统防火墙,应用识别,审计,IDS/IPS,流控的功能都聚集在一起,而实现这些每一个模块都有对应的自由开源软件的实现,很多数通产品本质上就是一个iptables/netfilter+layer7 filter+snort/Suricata+tc的一个优化版.
是IT社区推荐资讯的索引,它由IT社区成员主动分享的来自各种RSS源的内容组成,每天都有关于IT社区关心的内容索引更新。
ITIndex 刊登的IT社区分享的内容版权属于原作者或网站,ITIndex与分享内容原作者无关。刊登内容谨为网络故障时之索引。Theywillbuildafactory_____producesthingsthathaveneverbeensee
练习题及答案
They will build a factory _____ produces things that have never been seen before.
[     ]
A. where B. which C. that D. /
题型:单选题难度:中档来源:同步题
所属题型:单选题
试题难度系数:中档
答案(找答案上)
马上分享给同学
初中二年级英语试题“Theywillbuildafactory_____producesthingsthathaveneverbeensee”旨在考查同学们对
关系代词、
……等知识点的掌握情况,关于英语的核心考点解析如下:
此练习题为精华试题,现在没时间做?,以后再看。
根据试题考点,只列出了部分最相关的知识点,更多知识点请访问。
考点名称:
关系代词代表先行词,用来引导定语从句,同时在从句中作一定的句子成分。关系代词有主格,宾格和属格之分,并有指人与指物之分,并有指人与指物之分,它在先行词和定语之间起纽带作用。
关系代词有哪些?
主要的关系代词有who,whom,whose,which和that。
①who指人,在定语从句中作主语或宾语;
whom指人,在定语从句中作宾语;
whose在定语 从句中作定语,其先行词既可以是人也可以是物。
例如:The teacher who/whom you want to see has come.
②which指物,在定语从句中作主语或宾语。
例如:Here is the coat which will be made to you.
③that多指物,有时也指人,在定语从句中作主语或宾语。
例如:I have eaten bread that/which he gave to me.
关系代词的基本用法:
(1)引导定语从句
关系代词代表先行词,同时在从句中作一定的句子成分,例如:
The girl whom I spoke to is my cousin. 跟我讲话的姑娘是我表妹。
(2)which为其先行词。
例如:He said he saw me there, which was a lie.他说在那儿看到了我,纯属谎言。
(3)其他用法
关系代词that在从句中作宾语或表语时可省略, 例如:
I've forgotten much of the Latin I once knew.我过去懂拉丁语,现在大都忘了。
He's changed. He's not the man he was.他变化很大,已不是过去的他了。
注释:关系代词在从句中作宾语时可省略,that在从句中作表语时也可省略。
非限定性定语从句中,不能用that作关系代词。
关系代词的特殊用法
1.常用that,不用which的情况:
①先行词为all, anything, everything, nothing, something等时。
I will do all (that) I can to help you.
②先行词被序数词、形容词最高级或the only, the very等所修饰时。
He was the only person that joined the army in his village that year.
③先行词既有人,又有物时
They talked about the people and the things (that)they remembered in the school.
④当主句是以who 或which开头的疑问句时, 定语从句用that 引导, 以避免重复。
Who is the boy that was here just now?
2. 若被修饰的名词充当从句介词宾语时
介词可提前于引导词之前,此时的引导词只能用whom 或which.
The pencil with which he was writing broke.
3. 当先行词为way时
其后的定语从句用in which或 that引导,也可不用引导词。
I don&t like the way (in which/that) he talks to me.
4.不用that的情况
在引导非限定性定语从句时,介词后不能用that。如:We depend on the land from which we get our food.
5.只能用that作为定语从句的关系代词的情况
a.在there be 句型中,只用that,不用which。
b.在不定代词,如:anything, nothing, the one, all, much, few, any, little等作先行词时,只用that,不用which。
c.先行词有the only, the very.(恰恰,正好).any. few. little. no. all 修饰时,只用that。
d.先行词为序数词、数词、形容词最高级时,只用that。
e.先行词既有人,又有物时。
Finally, the thief handed everything that he had stolen to the police.那贼最终把偷的全部东西交给了警察。
6.不能用关系代词Which的几种情况
a.当先行词为all, little, much, few, everything, none 等不定代词时关系代词用that而不用which.
There are few books that you can read in this book store.
b.当先行词既有人又有物时,关系代词用that, 不用which.
He asked about the factories and workers that he had visited.
c.当先行词有形容词最高级修饰时,关系代词用that, 而不用which.
Guilin is one of the most beautiful cities that I have ever visited.
d.当先行词有序数词修饰时,关系代词用that, 不用which.
The first sight that was caught at the Great Wall has made a lasting impression on him.
e.当先行词被the only, the very, the same, the right等修饰时,关系代词用that,不用which.
It is the only book that he bought himself.
f.当先行词被all, every, any, much, little, few, no等修饰时,关系代词用that,不用which.
There is no clothes that fit you here.
g.当主句是以which开头的特殊问句时,定语从句关系代词一般用that而不用which.
Which of the books that had pictures was worth reading?
h.在强调句型& It is ... that ...& 中,只用that,不用which.
It is in this room that he was born twenty years ago.
i.在& such (the same) ... as ...& 句型中,关系代词要用as, 而不用which.
We need such materials as (not which) can bear high temperature.
j.表示& 正如... 那样 &,& 正象...& 之意时,用as, 不用which.
Mary was late again, as had been expected.
k.As 引导的定语从句可以放在主句前面,也可以放在主句后面或主句中间,而由 which引导的定语从句只能放在主句后面。
As we all know, oceans cover more than 70% of the earth.
7.关系代词可以省略的情况:
a.关系代词which,whom,who,that在定语从句中作宾语时可以省略。
Here is the man (who/that/whom)you're been looking for.
b.当that在从句中作补语时可以省略。
She is all (that) a teacher should be.
c.在there be 结构中出现定语从句,或在定语从句中出现there be 时,用作主语的关系代词也可省略。
This is the best dictionary (that) there is in the library.
d.状语的省略
当先行词是reason,而且定语从句中作原因状语时,关系代词可用why,that可以省略。如:That is the reason (why) I did it.
当先行词是way,且在定语从句中作方式状语时,关系代词可用in which,that,也可以省略。
当先行词是time时,关系代词可用when,that 或省略。
I don't know the exact time (when/that) the sports meet will take place.
注意:关系代词作宾语有时也不能省略。
8.关系代词不能省略情况:
a.在介词+whom与介词+which中,whom,which不能省略。
That is the headmaster with whom my father was talking just now.
b.在非限制性定语从句中,作宾语的关系代词也不能省略。
The elephant is like a spear,as anybody can see.
c.在the same ...as,such...as,as...as,the same...that中,as,that即使作宾语,也不能省略I have bought the same bicycle as you have (bought). (指同类用as)
This is the same book that I read the day before yesterday. (that指同一个)
d.当由and,but,or等连词连接两个或两个以上的定语从句修饰一个先行词时,第一个关系代词可省,但第二,第三个不可省略。
This is the book (which) I read yesterday and which I find very interesting.
关系代词和关系副词的区别
关系代词有who,whom, that, which, whose,关系副词有where(地点),when(时间),why(原因).
总体来说,关系副词在定语从句中做状语,他们和关系代词主要的区别是where,when,why=介词+which
如:This is the house in which (where) I lived last year.
相关练习题推荐
与“Theywillbuildafactory_____producesthingsthathaveneverbeensee”相关的知识点试题(更多试题练习--)
微信沪江中考
CopyRight & 沪江网2014

我要回帖

更多关于 使命召唤6提示错误 的文章

 

随机推荐