技术开发 频道

JavaScript 2.0新特性抢先看 向经典语言靠近

  【IT168 资讯】作为一个开发者和作家,我的一部分工作就是跟随web世界最新发展潮流——不管是关于公司合并、在线购物潮流、或者是编程技巧。我承认如今很难跟上 业界里发生的所有事情,但是有个四处流传的小道消息却吸引了许多的目光:JavaScript2.0提案。作为新的JavaScript2.0\EMCAScript 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++等面向对象语言的影响很深,这也意味着初 学者能很容易的上手。

  JavaScript2.0新特性语言的增强

  更加的面向对象

  迄今为止,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
0
相关文章