
EMCAScript6(ES6)是最新的Javascript,它包含了一些很棒的新特性。这些特性拥有不同程度的复杂性,对于简单的脚本和复杂的应用程序都非常的有用。\x0d\\x0d\增加的新特性:\x0d\\x0d\1箭头 *** 作符\x0d\ 如果你会C#或者Java,你肯定知道lambda表达式,ES6中新增的箭头 *** 作符=>便有异曲同工之妙。它简化了函数的书写。 *** 作符左边为输入的参数,而右边则是进行的 *** 作以及返回的值Inputs=>outputs。\x0d\ 我们知道在JS中回调是经常的事,而一般回调又以匿名函数的形式出现,每次都需要写一个function,甚是繁琐。当引入箭头 *** 作符后可以方便地写回调了。\x0d\\x0d\2类的支持\x0d\ ES6中添加了对类的支持,引入了class关键字(其实class在JavaScript中一直是保留字,目的就是考虑到可能在以后的新版本中会用到,现在终于派上用场了)。JS本身就是面向对象的,ES6中提供的类实际上只是JS原型模式的包装。现在提供原生的class支持后,对象的创建,继承更加直观了,并且父类方法的调用,实例化,静态方法和构造函数等概念都更加形象化。\x0d\\x0d\3增强的对象字面量\x0d\ 对象字面量被增强了,写法更加简洁与灵活,同时在定义对象的时候能够做的事情更多了。具体表现在:\x0d\(1)可以在对象字面量里面定义原型\x0d\(2)定义方法可以不用function关键字\x0d\(3)直接调用父类方法\x0d\\x0d\4字符串模板\x0d\ 字符串模板相对简单易懂些。ES6中允许使用反引号 ` 来创建字符串,此种方法创建的字符串里面可以包含由美元符号加花括号包裹的变量${vraible}。如果你使用过像C#等后端强类型语言的话,对此功能应该不会陌生。\x0d\\x0d\5解构\x0d\ 自动解析数组或对象中的值。比如若一个函数要返回多个值,常规的做法是返回一个对象,将每个值做为这个对象的属性返回。但在ES6中,利用解构这一特性,可以直接返回一个数组,然后数组中的值会自动被解析到对应接收该值的变量中。\x0d\\x0d\6参数默认值,不定参数,拓展参数\x0d\(1)默认参数值\x0d\ 现在可以在定义函数的时候指定参数的默认值了,而不用像以前那样通过逻辑或 *** 作符来达到目的了。\x0d\(2)不定参数\x0d\ 不定参数是在函数中使用命名参数同时接收不定数量的未命名参数。这只是一种语法糖,在以前的JavaScript代码中我们可以通过arguments变量来达到这一目的。不定参数的格式是三个句点后跟代表所有不定参数的变量名。比如下面这个例子中,x代表了所有传入add函数的参数\x0d\(3)拓展参数\x0d\ 拓展参数则是另一种形式的语法糖,它允许传递数组或者类数组直接做为函数的参数而不用通过apply。\x0d\\x0d\6let与const 关键字\x0d\ 可以把let看成var,只是它定义的变量被限定在了特定范围内才能使用,而离开这个范围则无效。const则很直观,用来定义常量,即无法被更改值的变量。\x0d\\x0d\7for of 值遍历\x0d\ 我们都知道for in 循环用于遍历数组,类数组或对象,ES6中新引入的for of循环功能相似,不同的是每次循环它提供的不是序号而是值。\x0d\8模块\x0d\ 在ES6标准中,JavaScript原生支持module了。这种将JS代码分割成不同功能的小块进行模块化的概念是在一些三方规范中流行起来的,比如CommonJS和AMD模式。\x0d\\x0d\9Map,Set 和 WeakMap,WeakSet\x0d\ 这些是新加的集合类型,提供了更加方便的获取属性值的方法,不用像以前一样用hasOwnProperty来检查某个属性是属于原型链上的呢还是当前对象的。同时,在进行属性值添加与获取时有专门的get,set方法。\x0d\\x0d\10Proxies\x0d\ Proxy可以监听对象身上发生了什么事情,并在这些事情发生后执行一些相应的 *** 作。一下子让我们对一个对象有了很强的追踪能力,同时在数据绑定方面也很有用处。\x0d\\x0d\11Symbols\x0d\ 我们知道对象其实是键值对的集合,而键通常来说是字符串。而现在除了字符串外,我们还可以用symbol这种值来做为对象的键。Symbol是一种基本类型,像数字,字符串还有布尔一样,它不是一个对象。Symbol 通过调用symbol函数产生,它接收一个可选的名字参数,该函数返回的symbol是唯一的。之后就可以用这个返回值做为对象的键了。Symbol还可以用来创建私有属性,外部无法直接访问由symbol做为键的属性值。\x0d\\x0d\12Math,Number,String,Object 的新API\x0d\ 对Math,Number,String还有Object等添加了许多新的API。下面代码同样来自es6features,对这些新API进行了简单展示。\x0d\\x0d\13Promises\x0d\ Promises是处理异步 *** 作的一种模式,之前在很多三方库中有实现,比如jQuery的deferred 对象。当你发起一个异步请求,并绑定了when(), done()等事件处理程序时,其实就是在应用promise模式。
首先,
var m = new test();用test构造函数来实例化一个对象。执行到第17行的时候:
thisage = 50;设置了一个当前对象的属性age=50;
但是,第18行:
return function (){return thisage;
}
相当于,返回了这个匿名函数作为当前对象(m)。也就是覆盖了由test函数构造的对象。也就是age已经没有了。这时,看看mage。会是undefined。
而第23行:
m();就是执行上面返回的匿名函数。this是什么 this是window对象。那thisage是什么呢就是最上面定义的100;
对于第二种情况,代码25行:
var n = test();就是一个普通的执行函数。那么在第17行:
thisage = 50;发生了什么呢?首先,确定this,也就是当前作用域什么什么。由于不是构造函数执行。那么,普通的函数执行的作用域应该为window。也就是第17行,相当于把window的age属性设置为50了。也就是最上面定义的变量。
那在执行26行:
n();和执行23行代码效果一样。因为age在执行17行的时候已经变成50了。so~就是50了。
function(){
代码
}
是定义一个匿名的function
function a(){
代码
}
则是定一个function名称为a的方法。
如果要从用法的角度来说明的话:
var a = function(){
代码
}
与
function a(){
代码
}
是等价的。 前者从思路上是先定义一个匿名的function并将该function赋值给变量a,后者是直接定一个名字为a的function。最终达到的效果是一致的。 如果你还有什么疑问想具体了解也可以加我百度hi好友,希望我的回答能帮到你。
注释已经很清楚了 就是个构造用函数
其具体步骤
if(windowdocViewJs = undefined)
如果window全局没有(值为undefined或未定义)docViewJs这个变量
那麽就
windowdocViewJs=self(window,document)
赋值self的执行结果给docViewJs
self就是传给匿名函数function(self)的参数, 这个参数是个函数(所以可以调用)
这个函数function(window,document)
返回了其内部定义的docViewJs, 是个Object
所以最终结果就是使得页面上有docViewJs这个命名空间
你用了这段代码, 其函数全绑定到了windowdocViewJs,
当然你只能用docViewJsxxx开头了
私有属性:构造函数中定义为实例属性的变量
公有属性:构造函数中定义的实例属性
私有静态属性:使用匿名函数返回构造函数而形成的闭包中定义的变量
公有静态属性:在类上定义的类属性
特权方法:构造函数中定义的访问私有属性和方法的实例方法
第一句话:popMenu()函数有4个参数;
2:argument是个集合,假如他的长度==1
3,4,5,6行略过;
7:show=show 或 执行函数让 o元素显示;
8:hide=hide 或 执行函数让o元素隐藏;
9:下面循环内容意思是遍历btns集合,执行函数,当鼠标滑过某个btns按钮时候将其显示出来;当鼠标离开的时候按钮隐藏;
这就是一个简单的页面有好多按钮,全都是隐藏的你看不到,鼠标移动到上面就显示出来,移开就再次隐藏;想象下就知道啥意思了
self是方法的一个参数;
windowmapViewJs 的意思是window(代表整个浏览器的全局变量)的一个属性(或者方法),可以动态给window等对象添加属性(或者方法)的一种写法;
function(window,document)是作为执行带self参数的匿名函数执行时的一个参数(参数可以是固常量、变量、对象、方法、表达式等);
您不知道如何称呼,我想说的是:没学会站稳,就开始学着人家跑了,首先方式就偏了。
建议你先站起来,走两步,走稳了再慢跑,慢慢的提高速度,然后就奔跑吧,兄弟~
/ 第一种,赋值给变量然后通过变量调用 /
var fun = function(){
};
fun(); //调用
/ 第二种就是立即执行,就是在匿名函数后边添加一个括号 /
(function(){
}());//结构一
function(){
}();//结构二
var fun2 = function(){
}();//结构三
方法一适合在任意位置调用,方法二适用于闭包
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)