JavaScript2.0标准的新特性 抢先尝鲜

互联网 | 编辑: 吴宏 2009-08-19 00:00:00转载 一键看全文

JavaScript历史

作者 Rob Gravelle

作者为我们简要的介绍了下正在制定中的JavaScript2.0标准,有许多新特性的介绍和相应的代码演示:

作为一个开发者和作家,我的一部分工作就是跟随web世界最新发展潮流——不管是关于公司合并、在线购物潮流、或者是编程技巧。我承认如今很难跟上 业界里发生的所有事情,但是有个四处流传的小道消息却吸引了许多的目光:JavaScript2.0提案。作为新的 JavaScript2.0EMCAScript 4.0计划于2009年终稿,但是日前已经做了很多的工作-包括好的、不好的。今天,我们来看看这份提案规范的一部分,看下他们是在改进这门语言还是狗尾 续貂。

JavaScript的历史

为了更好的理解JavaScript标准是如何实现的,让我们简要的看下这门语言的历史吧

JavaScript是ECMAScript脚本语言的一个分支。ECMAScript 是Ecma国际组织标准化的,这门语言的另外2个分支是ActionScript(macroMedia,Adobe)和JScript(微软)。 JavaScript是有Netscape的Brendan Eich开发的,最初叫Mocha而后是LiveScript,最后改为JavaScript。1993.3月,Sun公司发布了支持 JavaScript的Navigator2.0(译者:我感觉这是错误的,可查看原文)。鉴于JavaScript作为客户端脚本语言取得广泛流行,微 软制定了自己的脚本语言JScript,发布于1996.8月的ie3.0中。Netscape公司在日内瓦提交了JavaScript给Ecma国际标 准化组织,申请成为标准。

Ecma国际标准化组织是个管理信息、通信系统的、基于成员制度,非营利性国际机构 。这个机构起初是为了标准化欧洲的计算而于1991年成立,在它成立后的40年间,Ecma总共出台了370封标准和90个科技报告,其中包括了CD- ROM卷和文件系统,c++语言规范和他们的开放xml格式。第一版的ECMAScript(Ecma-262)于1997在Ecma全员大会上通过。不 管JavaScript还是JScript他们都是兼容ECMAScript的,同时也提供了Ecma规范没有提供的特殊的额外的特性。甚至在今 天,JavaScript和JScript依然有个很多不兼容的地方。JavaScript受如java、c++等面向对象语言的影响很深,这也意味着初 学者能很容易的上手。

语言的增强

更加的面向对象

迄今为止,JavaScript是使用的原型来做继承的,而不是经典的面向对象式的继承自父类。事实上,如下面实例的一样,如今JavaScript没有class的东西:

// Current JavaScript 1.x "Class" Definition
function MyClass()
{
 this.member1 = "a string";
 this.member2 = 10;
}
var myClass = new MyClass(); // class instantiation

// JavaScript 2.0 Class Definition
class TrueClass
{
 this.member1 = "a string";
 this.member2 = 10;
}
var trueClass = new TrueClass(); // class instantiation

当对象的构造函数和他们类型角色一起的时候,构造函数会翻倍。使用new 调用函数的时候会创建一个新对象,而后你就可以使用被bind到这个对象的本地关键字this来调用这个函数。函数的原型决定了这个对象的原型。不管什么 类型的值赋予一个对象的原型,那么它都会被他所有的实例和汉字共享。使用原型 ,JavaScript可以模拟许多基于class的特性,尽管有些古怪。举个例子,在下面的代码中,myOtherDog尝试去重载父类Dog的 getBreed() 函数。虽然myOtherDog的getBreed()函数是能够实现的,但是他没有重载成功——给了myOtherDog两个面包。

function Dog(name)
{
  this.name = name;
  this.bark = function() { alert('Woof!'); };
  this.displayName = function() { alert(this.name); };
};

var myDog = new Dog('Killer');
myDog.displayName(); //Killer
myDog.bark(); //Woof!

Dog.prototype.getBreed = function()
{
  alert("Mutt");
};

myDog.getBreed(); //Mutt

myOtherDog = new Dog('Bowzer');

// this hides getBreed() from other Dogs
myOtherDog.getBreed = function()
{
  return "Lhasa Apso";
};
alert(myOtherDog.getBreed()); //Lhaso Apso and Mutt!

alert(myDog.getBreed()); //function is undefined

提示:试试键盘 “← →” 可以实现快速翻页 

总共 2 页12
一键看全文

本文导航

相关阅读

每日精选

点击查看更多

首页 手机 数码相机 笔记本 游戏 DIY硬件 硬件外设 办公中心 数字家电 平板电脑