JavaScript2.0提案

2016-02-20 00:57 3 1 收藏

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的JavaScript2.0提案,手机电脑控们准备好了吗?一起看过来吧!

【 tulaoshi.com - Web开发 】

JavaScript2.0 :尝鲜

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

JavaScript的历史

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

为了更好的理解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

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

当对象的构造函数和他们类型角色一起的时候,构造函数会翻倍。使用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

强类型

像大多数的脚本语言一样,JavaScript也是弱类型的。解释器会在运行时,基于值来决定某变量的数据类型。这种松散性使得开发者可以很灵活的重用和比较变量。在后种情况,使用强制类型转换就可以比较两种不同数据类型的值;JavaScript会自动在比较之前将他们转化成相同的类型。

alert( "42" == 42 ); //true
alert( ("42" == 42) + 1 ); //2. the boolean true evaluates to 1.
alert( "I live at " + 99 + " Renolds street."); // the 99 int is converted to a string.

相反的,JavaScript2.0会强类型化了些,这就意味着必须显式的申明变量的类型,脚本引擎不会强制类型转换了。类型可以赋予属性、函数参数、函数返回值、变量、对象、数组的初始化对象。如果没有定义类型,那么变量或者属性被设置为默认的Object类型,这是所有的数据类型层级的基类。使用:后跟类型申明的是赋类型的语法:

var a:int = 100; //variable a has a type of int
var b:String = "A string."; //variable b has a type of String

function (a:int, b:string)//the function accepts two parameters, one of type int, one of type string

function(...):int //the function returns a value with a type of int

为了进行上述的比较,你需要转换类型:

alert( int("42") == 42 ); //true
alert( int("42" == 42) + 1 ); //2
alert( "I live at " + string(99) + " Renolds street.");

程序单元体

借鉴了各种流行js框架,程序单元体是很有用的代码模块,它可以在运行时导入。当框架和自定义库数量越来越多的时候,这些已经成为web程序不可或缺的组成部分。设想下,包含了成千上万行代码的库们,一次性下载他们已经不合时宜了。这是伪代码:

use unit Effects "http://mysite/lib/Effects";
use unit Utils "http://mysite/lib/Utils";

var panel = new Panel();
panel.setTime(Util.getFormattedTime());

 编译时的类型检查

在JavaScript2.0 里,你可以使用严格模式来编译JavaScript模块。在运行之前,它可以检查几个重要的方面的完整性,包括:

静态类型检查

引用名称确认

对常数的非法赋值

保证比较的两个值有合法的类型

常数

先前的JavaScript开发者不得不使用命名规范或者精心制定的工作规则保护他们的常量。而这些在JavaScript2.0都是不需要的:

//JavaScript 1.x constant
var CULTURE_CONST = "Do you really want to change me?"; // constant in appearance only.

//JavaScript 2.0 constant
const HAMMER_TIME = "You can't touch this!" // a true constant.

命名空间

随着js框架的不断涌现,使用命名空间已经变得越来越必要了。这个标准目前被用作创建全局对象来保护你自己的功能不给先前的全局对象和函数击倒在地(直译)。

 总结

许多向对2.0提案进行了猛烈的抨击,批评它在想经典的语言如c++、java在靠近。

...JavaScript是动态、灵活的,使用原型继承和对象模型是很实用,很基础的优势,为什么有人要把这些那么优雅、灵活的东西变成java呢,java基本上强制性的让程序员使用古典的,基于class的继承我搞不懂。

而我个人对此很感受很复杂,即欢迎像class,命名空间,常量这样好的变化,也对强类型脚本变量很不感冒。总体上说,JavaScript冒着对业余程序员变得更严格,相应的更严肃的危险 。不过,我也想应该感谢那些商业网站能够使用像我这样的专业人士来编码他们的业务流程。不管结果如何,无疑web开发的格局将会发生戏剧性的改变。

来源:https://www.tulaoshi.com/n/20160220/1632910.html

延伸阅读
标签: 产后瘦身
产后恢复好身材,多喝海带汤! 红糖水非常适合产后第一餐食用,不仅能活血化瘀,还能补血,并促进产后恶露排出。但红糖水也不能喝得太多,时间长了,对身体非但无益反而有害。 新妈妈在分娩时,由于精力和体力消耗非常大,加之失血,产后还要哺乳,因此需要补充大量铁质。红糖水非常适合产后第一餐食用,不仅能活血化...
开源操作系统开发商Linspire今天发布了他们的Freespire 2.0.6,一个基于Ubuntu的Linux OS发行版本。 Freespire 2.0支持MP3,Windows,Real Media,Java,Flash等媒体格式。当然也同时支持ATI,Nvidia,Wi-Fi等驱动或应用。它甚至还包含了一个自己的CNR服务系统, 可以让用户运行那些基于Windows的程序。当然,Freespire所包含的这些功能都是目前...
KnockOut自推出以来,备受好评,因它想设计师所想,做设计师所不爱做,解决了设计中枯燥乏味、令人头痛的一大难题--抠图。2000年1月,COREL把它从它原来的东家那里收购回来之后,KNOCKOUT就改了姓氏,变成Procreate KnockOut (Procreate 是Corel的一个专业产品系列),级别也长了2次,现在已经是2.0版本了。它的形式和功能也都随之有了变化,从...
标签: 护肤方法 护肤
当肌肤闹情绪出现问题时,你可先别急着去解决,先让它“平静”下来,再慢慢调理。下面7个抗敏感提案可以助你安然度过敏感期,再也不用担心烂脸满天飞了。一起来调教下不听话的情绪肌吧! 提案一:避免用过热的水清洁肌肤 过热的水温会刺激肌肤底层的血管扩张,同时损伤角质层,令必要的...
标签: Web开发
函数为程序设计人员提供了一个非常方便的能力。通常在进行一个复杂的程序设计时,总是根据所要完成的功能,将程序划分为一些相对独立的部分,每部分编写一个函数。从而,使各部分充分独立,任务单一,程序清晰,易懂、易读、易维护。JavaScript函数可以封装那些在程序中可能要多次用到的模块。并可作为事件驱动的结果而调用的程序。从而实现...

经验教程

617

收藏

55

精华推荐

如何玩转微云2.0

如何玩转微云2.0

张二爷sky

楼书提案版面设计欣赏

楼书提案版面设计欣赏

想念冬天吧

4提案轻松解决宝宝便秘难题

4提案轻松解决宝宝便秘难题

小北1北

微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部