±à¼ÍƼö: |
±¾ÎÄÀ´×Ô²®ÀÖÔÚÏߣ¬±¾Îļòµ¥½éÉܼ¸¸öES6ºËÐĸÅÄî,Ϊʲô»á²úÉúES6Õâ´Î¸üеÄÔÒò¡ª¡ª±àд¸´ÔӵĴóÐÍÓ¦ÓóÌÐò¡£ |
|
ǰÑÔ
ECMAScript 6.0£¨ÒÔϼò³Æ ES6£©ÊÇ JavaScript
ÓïÑÔµÄÏÂÒ»´ú±ê×¼£¬ÒѾÔÚ 2015 Äê 6 ÔÂÕýʽ·¢²¼ÁË¡£ËüµÄÄ¿±ê£¬ÊÇʹµÃ JavaScript ÓïÑÔ¿ÉÒÔÓÃÀ´±àд¸´ÔӵĴóÐÍÓ¦ÓóÌÐò£¬³ÉΪÆóÒµ¼¶¿ª·¢ÓïÑÔ¡£
»Ø¹Ë½üÁ½ÄêµÄǰ¶Ë¿ª·¢£¬¸´ÔÓ¶ÈȷʵÔÚ¿ìËÙÔö¼Ó£¬½üÆÚ²»ÂÛ´Óϵͳ¸´ÔÓ¶È»¹Êǵ½Ç°¶Ë¿ª·¢ÈËÔ±ÊýÁ¿Ó¦¸Ã´ïµ½ÁËÒ»¸ö±¥ºÍÖµ£¬»»¸ö·½Ê½Ëµ£¬Ã»ÓÐES6ÎÒÃǵÄǰ¶Ë´úÂëÒÀ¾É¿ÉÒÔдºÜ¶à¸´ÔÓµÄÓ¦Ó㬶øES6µÄÌá³ö¸üºÃµÄ°ïÎÒÃǽâ¾öÁ˺ܶàÀúÊ·ÒÅÁôÎÊÌ⣬ÁíÒ»¸ö½Ç¶ÈES6ÈÃJS¸üÊʺϿª·¢´óÐÍÓ¦Ó㬶ø²»ÓÃÒýÓÃÌ«¶àµÄ¿âÁË¡£
³ýÁËÈîÀÏʦµÄÎÄÕ»¹²Î¿¼£ºhttp://www.infoq.com/cn/articles/es6-in-depth-arrow-functions
PS£ºÎÄÖÐÖ»ÊǸöÈ˸ÐÎò£¬ÓÐÎóÇëÔÚÆÀÂÛÌá³ö
Ä£¿éModuleµÄÒýÈë
¶¼ËµÁ˸´ÔӵĴóÐÍÓ¦ÓÃÁË£¬ËùÒÔÎÒÃǵÚÒ»¸öÒªÌÖÂÛµÄÖØÒªÌØÐÔ¾ÍÊÇÄ£¿é¸ÅÄÎÒÃÇ×öÒ»¸ö¸´ÔÓµÄÏîÄ¿±Ø¶¨ÐèÒªÁ½²½×ߣº
¢Ù ·ÖµÃ¿ª£¬²¢ÇÒÐèÒª·Ö¿ª
¢Ú ºÏµÃÆðÀ´
ÎÒÃÇÆÕ±éÈÏΪûÓи´ÔÓµÄÓ¦Óã¬Ö»Óзֲ»¿ªµÄÓ¦Óã¬ÔÙ¸´ÔÓµÄÓ¦Óã¬Ò»µ©¿ÉÒÔʹÓÃ×é¼þ»¯¡¢Ä£¿é»¯µÄ·½Ê½·Ö³É²»Í¬µÄСµ¥Ôª£¬ÄÇôÆäÄѶȱã»á´ó´ó½µµÍ£¬Ä£¿é»¯ÊÇ´óÐÍ¡¢¸´ÔÓÏîÄ¿µÄÖ÷ÒªÀ¹Â·»¢¡£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬ÉçÇøÖÆ¶¨ÁËһЩģ¿é¼ÓÔØ·½°¸£¬¶ÔÓÚä¯ÀÀÆ÷¿ª·¢À´Ëµ£¬ÎÒÃÇÓõÄ×î¶àµÄÊÇAMD¹æ·¶£¬Ò²¾ÍÊÇ´ó¼ÒÊìÖªµÄrequireJS£¬¶øES6ÖÐÔÚÓïÒô±ê×¼²ãÃæÊµÏÖÁËÄ£¿é¹¦ÄÜ£¬ÓÃÒÔÈ¡´ú·þÎñ¶ËͨÐŵÄCommonJSºÍAMD¹æ·¶£¬³ÉΪÁËͨÓõĹ淶£¬¶à˵ÎÞÒæ£¬ÎÒÃÇÕâÀïÉÏÒ»¶Î´úÂë˵Ã÷£º
/*
validate.js ¶àÓÃÓÚ±íµ¥ÑéÖ¤
*/
export function isEmail (text) {
var reg = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return reg.test(text);
}
export function isPassword (text) {
var reg = /^[a-zA-Z0-9]{6,20}$/;
return reg.test(text);
} |
ÄÇôÎÒÃÇÏÖÔÚÏëÔÚÒ³ÃæÀïÃæÊ¹ÓÃÕâ¸ö¹¤¾ßÀà¸ÃÔõô×öÄØ£º
<!DOCTYPE html>
<html lang="en">
<head> <meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- Çë×¢ÒâÕâÀïtype=module²ÅÄÜÔËÐÐ -->
<script type="module">
import {isEmail} from './validate.js';
var e1 = 'dddd';
var e2 = 'yexiaochai@qq.com'
console.log(isEmail(e1))
console.log(isEmail(e2))
</script>
</body>
</html> |
ES6ÖеÄModuleÌá³ö£¬ÔÚÎÒÕâÀï¿´À´ÊÇÏëÔÚ¹Ù·½Íê³É֮ǰrequireJS¸ÉµÄ¹¤×÷£¬ÕâÀïÒ²ÓÐһЩ±¾ÖÊÉϵIJ»Ò»Ñù£º
¢Ù requireJSÊÇʹÓüÓÔØscript±êÇ©µÄ·½Ê½ÔØÈëjs£¬Ã»ÓÐʲôÏÞÖÆ
¢Ú importÃüÁî»á±»jsÒýÇæ¾²Ì¬·ÖÎö£¬ÏÈÓÚÄ£¿éÆäËûÓï¾äÖ´ÐÐ
ÒÔÉÏÌØÐÔ»áÖ±½Ó¸øÎÒÃÇ´øÀ´Ò»Ð©À§ÈÅ£¬±ÈÈçÔÀ´ÎÒÃÇÏîÄ¿¿ØÖÆÆ÷»áÓÐÕâôһ¶Î´úÂ룺
var viewId =
''; //ÓÉä¯ÀÀÆ÷»ñÈ¡ÊÔͼid,url¿ÉÄÜΪ?viewId=booking|list|...
//Èç¹û²»´æÔÚÔòÐèÒª¹¹½¨£¬¼Çס¹¹½¨Ê±ÐèҪʹÓÃviewdata¼Ì³ÐÔ´view
requirejs(viewId, function(View) {
//Ö´Ðиù¾Ýurl²ÎÊý¶¯Ì¬¼ÓÔØviewÂß¼
}) |
Ç°ÃæËµ¹ýÁË£¬importÃüÁî»á±»jsÒýÇæ¾²Ì¬·ÖÎö£¬ÏÈÓÚÄ£¿éÆäËûÓï¾äÖ´ÐУ¬ËùÒÔÎÒÃÇÔÚ¸ù±¾²»Äܽ«importÖ´ÐÐÖͺ󣬻òÕß¶¯Ì¬»¯£¬×ö²»µ½µÄ£¬ÕâÖÖд·¨Ò²ÊDZ¨´íµÄ£º
if (viewId) {
import view from './' + viewId;
} |

ÕâÖÖÉè¼Æ»áÓÐÀûÓÚÌá¸ß±àÒëÆ÷ЧÂÊ£¬µ«ÊÇ֮ǰµÄ¶¯Ì¬ÒµÎñÂß¼¾Í²»ÖªµÀÈçºÎ¼ÌÐøÁË£¿¶øES6Èç¹ûÌṩimportµÄ·½·¨£¬ÎÒÃDZä¿ÉÒÔÖ´ÐÐÂß¼£º
import(viewId,
function() {
//äÖÈ¾Ò³Ãæ
}) |
ÊÂʵÉÏËûÒ²ÌṩÁË£º

ÏÖÔÚ¿´ÆðÀ´£¬JSÖеÄÄ£¿é±ãÊ®·ÖÍêÃÀÁË£¬ÖÁÓÚÆäÖÐһЩϸ½Ú£¬±ã¿ÉÒÔÓõ½µÄʱºòÔÙ˵ÁË
ES6ÖеÄClass
ÎÒÃǶÔÎÒÃǵĶ¨Î»Ò»Ö±ÊǷdz£ÇåÎúµÄ£¬ÎÒÃǾÍÊÇÒª¸É´óÏîÄ¿µÄ£¬ÎÒÃÇÊÇÒª¸É¸´ÔÓµÄÏîÄ¿£¬³ýÁËÄ£¿é¸ÅÄÀàµÄ¸ÅÄîÒ²·Ç³£ÖØÒª£¬ÎÒÃÇ֮ǰÓõÄÕâÖÖ·½Ê½ÊµÏÖÒ»¸öÀ࣬ÎÒÃÇÀ´Î¹ʶøÖªÐ¡£
µ±Ò»¸öº¯Êý±»´´½¨Ê±£¬Function¹¹Ô캯Êý²úÉúµÄº¯Êý»áÒþʽµÄ±»¸³ÓèÒ»¸öprototypeÊôÐÔ£¬prototype°üº¬Ò»¸öconstructor¶ÔÏó
¶øconstructor±ãÊǸÃк¯Êý¶ÔÏó£¨constructorÒâÒå²»´ó£¬µ«ÊÇ¿ÉÒÔ°ïÎÒÃÇÕÒµ½¼Ì³Ð¹ØÏµ£©
ÿ¸öº¯Êý¶¼»áÓÐÒ»¸öprototypeÊôÐÔ£¬¸ÃÊôÐÔÖ¸ÏòÁíÒ»¶ÔÏó£¬Õâ¸ö¶ÔÏó°üº¬¿ÉÒÔÓÉÌØ¶¨ÀàÐ͵ÄËùÓÐʵÀý¹²ÏíµÄÊôÐԺͷ½·¨
ÿ´ÎʵÀý»¯ºó£¬ÊµÀýÄÚ²¿¶¼»á°üº¬Ò»¸ö[[prototype]]£¨__proto__£©µÄÄÚ²¿ÊôÐÔ£¬Õâ¸öÊôÐÔÖ¸Ïòprototype
¢Ù ÎÒÃÇͨ¹ýisPrototypeOfÀ´È·¶¨Ä³¸ö¶ÔÏóÊDz»ÊÇÎÒµÄÔÐÍ
¢Ú hasOwnPrototype ¿ÉÒÔ¼ì²âÒ»¸öÊôÐÔÊÇ´æÔÚʵÀýÖл¹ÊÇÔÐÍÖУ¬¸ÃÊôÐÔ²»ÊÇÔÐÍÊôÐԲŷµ»Øtrue
var Person
= function (name, age) {
this.name = name;
this.age = age;
};
Person.prototype.getName = function () {
return this.name;
};
var y = new Person('ҶСîÎ', 30);
var Person = function (name, age) {
this.name = name;
this.age = age;
};
Person.prototype.getName = function () {
return this.name;
};
var y = new Person('ҶСîÎ', 30) |

ΪÁË·½±ã£¬Ê¹Óã¬ÎÒÃÇ×öÁ˸üΪ¸´Ôӵķâ×°£º
var arr =
[];
var slice = arr.slice;
function create() {
if (arguments.length == 0 || arguments.length
> 2) throw '²ÎÊý´íÎó';
var parent = null;
//½«²ÎÊýת»»ÎªÊý×é
var properties = slice.call(arguments);
//Èç¹ûµÚÒ»¸ö²ÎÊýΪÀࣨfunction£©£¬ÄÇô¾Í½«Ö®È¡³ö
if (typeof properties[0] === 'function')
parent = properties.shift();
properties = properties[0];
function klass() {
this.initialize.apply(this, arguments);
}
klass.superclass = parent;
klass.subclasses = [];
if (parent) {
var subclass = function () { };
subclass.prototype = parent.prototype;
klass.prototype = new subclass;
parent.subclasses.push(klass);
}
var ancestor = klass.superclass && klass.superclass.prototype;
for (var k in properties) {
var value = properties[k];
//Âú×ãÌõ¼þ¾ÍÖØÐ´
if (ancestor && typeof value == 'function')
{
var argslist = /^\s*function\s*\(([^\(\)]*?)\)\s*?\{/i.exec
(value.toString())[1].replace(/\s/i, '').split(',');
//Ö»ÓÐÔÚµÚÒ»¸ö²ÎÊýΪ$superÇé¿öϲÅÐèÒª´¦Àí
£¨ÊÇ·ñ¾ßÓÐÖØ¸´·½·¨ÐèÒªÓû§×Ô¼º¾ö¶¨£©
if (argslist[0] === '$super' && ancestor[k])
{
value = (function (methodName, fn) {
return function () {
var scope = this;
var args = [function () {
return ancestor[methodName].apply(scope, arguments);
} ];
return fn.apply(this, args.concat(slice.call(arguments)));
};
})(k, value);
}
}
klass.prototype[k] = value;
}
if (!klass.prototype.initialize)
klass.prototype.initialize = function () { };
klass.prototype.constructor = klass;
return klass;
} |
View Code
ÕâÀïдһ¸ödemo£º
var AbstractView
= create({
initialize: function (opts) {
opts = opts || {};
this.wrapper = opts.wrapper || $('body');
//ʼþ¼¯ºÏ
this.events = {};
this.isCreate = false;
},
on: function (type, fn) {
if (!this.events[type]) this.events[type] = [];
this.events[type].push(fn);
},
trigger: function (type) {
if (!this.events[type]) return;
for (var i = 0, len = this.events[type].length;
i < len; i++) {
this.events[type][i].call(this)
}
},
createHtml: function () {
throw '±ØÐëÖØÐ´';
},
create: function () {
this.root = $(this.createHtml());
this.wrapper.append(this.root);
this.trigger('onCreate');
this.isCreate = true;
},
show: function () {
if (!this.isCreate) this.create();
this.root.show();
this.trigger('onShow');
},
hide: function () {
this.root.hide();
}
});
var Alert = create(AbstractView, {
createHtml: function () {
return '<div class="alert">ÕâÀïÊÇalert¿ò</div>';
}
});
var AlertTitle = create(Alert, {
initialize: function ($super) {
this.title = '';
$super();
},
createHtml: function () {
return '<div class="alert"><h2>'
+ this.title + '</h2>ÕâÀïÊÇ´ø±êÌâalert¿ò</div>';
},
setTitle: function (title) {
this.title = title;
this.root.find('h2').html(title)
}
});
var AlertTitleButton = create(AlertTitle, {
initialize: function ($super) {
this.title = '';
$super();
this.on('onShow', function () {
var bt = $('<input type="button"
value="µã»÷ÎÒ" />');
bt.click($.proxy(function () {
alert(this.title);
}, this));
this.root.append(bt)
});
}
});
var v1 = new Alert();
v1.show();
var v2 = new AlertTitle();
v2.show();
v2.setTitle('ÎÒÊDZêÌâ');
var v3 = new AlertTitleButton();
v3.show();
v3.setTitle('ÎÒÊDZêÌâºÍ°´Å¥µÄalert'); |

ES6ÖÐÖ±½Ó´Ó±ê×¼²ãÃæ½â¾öÁËÎÒÃǵÄÎÊÌ⣬ËûÌá³öÁËClass¹Ø¼ü´ÊÈÃÎÒÃÇ¿ÉÒÔ¸üºÃµÄ¶¨ÒåÀ࣬ÎÒÃÇÕâÀïÓÃÎÒÃÇES6µÄÄ£¿éÓï·¨ÖØÐÂʵÏÖÒ»´Î£º
export class
AbstractView {
constructor(opts) {
opts = opts || {};
this.wrapper = opts.wrapper || $('body');
//ʼþ¼¯ºÏ
this.events = {};
this.isCreate = false;
}
on(type, fn) {
if (!this.events[type]) this.events[type] = [];
this.events[type].push(fn);
}
trigger(type) {
if (!this.events[type]) return;
for (var i = 0, len = this.events[type].length;
i < len; i++) {
this.events[type][i].call(this)
}
}
createHtml() {
throw '±ØÐëÖØÐ´';
}
create() {
this.root = $(this.createHtml());
this.wrapper.append(this.root);
this.trigger('onCreate');
this.isCreate = true;
}
show() {
if (!this.isCreate) this.create();
this.root.show();
this.trigger('onShow');
}
hide() {
this.root.hide();
}
}
export class Alert extends AbstractView {
createHtml() {
return '<div class="alert">ÕâÀïÊÇalert¿ò</div>';
}
}
export class AlertTitle extends Alert {
constructor(opts) {
super(opts);
this.title = '';
}
createHtml() {
return '<div class="alert"><h2>'
+ this.title + '</h2>ÕâÀïÊÇ´ø±êÌâalert¿ò</div>';
}
setTitle(title) {
this.title = title;
this.root.find('h2').html(title)
}
}
export class AlertTitleButton extends AlertTitle
{
constructor(opts) {
super(opts);
this.on('onShow', function () {
var bt = $('<input type="button"
value="µã»÷ÎÒ" />');
bt.click($.proxy(function () {
alert(this.title);
}, this));
this.root.append(bt)
});
}
} |
<!DOCTYPE
html>
<html lang="en">
<head> <meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script type="text/javascript" src="zepto.js"></script>
<!-- Çë×¢ÒâÕâÀïtype=module²ÅÄÜÔËÐÐ -->
<script type="module">
import {Alert, AlertTitle, AlertTitleButton} from
'./es6class.js';
var v1 = new Alert();
v1.show();
var v2 = new AlertTitle();
v2.show();
v2.setTitle('ÎÒÊDZêÌâ');
var v3 = new AlertTitleButton();
v3.show();
v3.setTitle('ÎÒÊDZêÌâºÍ°´Å¥µÄalert');
</script>
</body>
</html> |
ÕâÀïµÄ´úÂëÍê³ÉÁËÓëÉÏÃæÒ»ÑùµÄ¹¦ÄÜ£¬¶ø´úÂë¸ü¼ÓµÄÇåˬÁË¡£
ES6Öеĺ¯Êý
ÎÒÃÇÕâÀïѧϰES6£¬ÓÉ´óµ½Ð¡£¬Ê×ÏÈÌÖÂÛÄ£¿é£¬Æä´ÎÌÖÂÛÀ࣬Õâ¸öʱºòÀíËùµ±È»µ½ÁËÎÒÃǵĺ¯ÊýÁË£¬ES6Öк¯ÊýÒ²¶àÁ˺ܶàÐÂÌØÐÔ»òÕß˵Óï·¨Ìǰɣ¬Ê×ÏÈÎÒÃÇÀ´ËµÒ»ÏÂÕâÀïµÄ¼ýÍ·º¯Êý
¼ýÍ·º¯Êý
//ES5
$('#bt').click(function (e) {
//doing something
})
//ES6
$('#bt').click(e => {
//doing something
}) |
ÓеãÓï·¨Ìǵĸоõ£¬ÓÐÒ»¸öºÜ´ó²»Í¬µÄÊÇ£¬¼ýÍ·º¯Êý²»¾ßÓÐthisÊôÐÔ£¬¼ýÍ·º¯ÊýÖ±½ÓʹÓõÄÊÇÍⲿµÄthisµÄ×÷ÓÃÓò£¬Õâ¸öÏë²»ÏëÓÿ´¸öÈËϰ¹ß°É¡£
²ÎÊýÐÂÌØÐÔ
ES6¿ÉÒÔΪ²ÎÊýÌṩĬÈÏÊôÐÔ
function log(x,
y = 'World') {
console.log(x, y);
}
log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello |
ÖÁÓÚ²»¶¨²ÎÊýÈöµÄ£¬ÎÒÕâÀïûÓжà¹ý¶àµÄʹÓ㬵ÈÏîÄ¿Óöµ½ÔÙ˵°É£¬Èç¹ûÑо¿µÄ̫ϸË飬·´¶ø²»ÊʺÏÎÒÃÇ¿ªÕ¹¹¤×÷¡£
let¡¢constºÍvar
֮ǰµÄjsÊÀ½çÀÎÒÃǶ¨Òå±äÁ¿¶¼ÊÇʹÓõÄvar£¬±ð˵»¹ÕæÍ¦ºÃÓõģ¬ËäÓлáÓÐһЩÎÊÌ⣬µ«ÊǶÔÓÚÊìϤjsÌØÐÔµÄС»ï°é¶¼ÄܺܺõĽâ¾ö£¬Ò»°ã¼Çס£º±äÁ¿ÌáÉý»á½â¾ö¾ø´ó¶àÊýÎÊÌâ¡£
¾ÍÄܽâ¾öºÜ¶àÎÊÌ⣬¶øÇÒÕæÊµÏîÄ¿ÖУ¬ÎÒÃÇ»á»á±ÜÃâ³öÏÖ±äÁ¿³öÏÖÖØÃûµÄÇé¿öËùÒÔÓÐʱºò´ó¼ÒÃæÊÔÌâÖп´µ½µÄ³¡¾°ÔÚʵ¼Ê¹¤×÷ÖкÜÉÙ·¢Éú£¬Ö»Òª²»¿ÌÒâÒÜÏë¡¢ÖÆÔìһЩÄÑÒÔÅжϵij¡¾°£¬Æäʵ²¢²»»á³öÏÖ¶àÉÙBUG£¬²»ÄÜÒòΪÏ뿼²ìÈ˼ҶÔÓïÑÔÌØÐÔµÄÁ˽⣬¾Í×öһЩÈÝÒ×ÈÝÒ×ÍüµôµÄÏÝÚåÌâ¡£
ÎÞÂÛÈçºÎ£¬var ÉùÃ÷µÄ±äÁ¿Êܵ½ÁËÒ»¶¨Ú¸²¡£¬ÊÂʵÉÏÔÚÇ¿ÀàÐÍÓïÑÔ¿´À´Ò²È·ÊµÊÇÉè¼ÆBUG£¬µ«ÊÇÍêÈ«·ÏÆúvarµÄʹÓÃÏÔÈ»²»ÊÇjs¸Ã×öµÄÊÂÇ飬ÕâÖÖÇé¿öϳöÏÖÁËlet¹Ø¼ü´Ê¡£
letÓëvarÒ»ÖÂÓÃÒÔÉùÃ÷±äÁ¿£¬²¢ÇÒÒ»ÇÐÓÃvarµÄµØ·½¶¼¿ÉÒÔʹÓÃletÌæ»»£¬Ðµıê×¼Ò²½¨Òé´ó¼Ò²»ÒªÔÙʹÓÃvarÁË£¬let¾ßÓиüºÃµÄ×÷ÓÃÓò¹æÔò£¬Ò²ÐíÕâ¸ö¹æÔòÊDZ߽ç¸ü¼ÓÇåÎúÁË£º
{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1 |
ÕâÀïÊÇÒ»¸ö¾µäµÄ±Õ°üÎÊÌ⣺
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 10 |
ÒòΪiÔÚÈ«¾Ö·¶Î§ÓÐЧ£¬¹²Ïíͬһ¸ö×÷ÓÃÓò£¬ËùÒÔi¾ÍÖ»ÓÐ10ÁË£¬ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬ÎÒÃÇ֮ǰ»áÒýÈë±Õ°ü£¬²úÉúеÄ×÷ÓÃÓò¿Õ¼ä£¨ºÃÏñѧÃûÊDZäÁ¿¶ÔÏó£¬ÎÒ¸øÍüÁË£©£¬µ«ÊÇÄÇÀïµÄi¸úÕâÀïµÄiÒѾ²»ÊÇÒ»¸ö¶«Î÷ÁË£¬µ«Èç¹û½«var¸Ä³Élet£¬ÉÏÃæµÄ´ð°¸ÊÇ·ûºÏÔ¤ÆÚµÄ¡£¿ÉÒÔ¼òµ¥Àí½âΪÿһ´Î¡°{}¡±£¬let¶¨ÒåµÄ±äÁ¿¶¼»á²úÉúеÄ×÷ÓÃÓò¿Õ¼ä£¬ÕâÀï²úÉúÁËÑ»·£¬ËùÒÔÿһ´Î¶¼²»Ò»Ñù£¬ÕâÀïÓë±Õ°üÓеãÀàËÆÊÇ¿ª±ÙÁ˲»Í¬µÄ¿Õ¼ä¡£
for (let i =
0; i < 3; i++) {
let i = 'abc';
console.log(i);
}
// abc
// abc
// abc |
ÕâÀïÒòΪÄÚ²¿ÖØÐÂÉùÃ÷ÁËi£¬ÊÂʵÉϲúÉúÁË3¸ö×÷ÓÃÓò£¬ÕâÀïÒ»¹²ÓÐ4¸ö×÷ÓÃÓòÖ¸Ïò£¬let×î´óµÄ×÷ÓþÍÊÇjsÖп鼶×÷ÓÃÓòµÄ´æÔÚ£¬²¢ÇÒÄÚ²¿µÄ±äÁ¿²»»á±»ÍⲿËù·ÃÎÊ£¬ËùÒÔ֮ǰΪÁË·ÀÖ¹±äÁ¿ÎêÈèµÄÁ¢¼´Ö´Ðк¯Êý£¬Ëƺõ±äµÃ²»ÊÇÄÇô±ØÒªÁË¡£
֮ǰÎÒÃǶ¨ÒåÒ»¸ö³£Á¿»á²ÉÓÃÈ«²¿´óдµÄ·½Ê½£º
ΪÁ˽â¾öÕâ¸öÎÊÌ⣬ES6ÒýÈëÁËconstÃüÁÈÃÎÒÃǶ¨ÒåÖ»¶Á³£Á¿£¬ÕâÀï²»¶Ôϸ½Ú×ö¹ý¶àÑо¿£¬Ö±½ÓºóÐøÏîĿʵ¼ù°É£¬ÏîÄ¿³öÕæÖª¡£
Éú³ÉÆ÷Generators
ES6ÖÐÌá³öÁËÉú³ÉÆ÷GeneratorsµÄ¸ÅÄÕâÊÇÒ»ÖÖÒì²½±à³ÌµÄ½â¾ö·½°¸£¬¿ÉÒÔ½«ÆäÀí½âΪһÖÖ״̬»ú£¬·â×°Á˶à¸öÄÚ²¿×´Ì¬£¬ÕâÀïÀ´¸ödemo£º
function* helloWorldGenerator()
{
yield 'hello';
yield 'world';
return 'ending';
}
var hw = helloWorldGenerator();
hw.next()
// { value: 'hello', done: false }
hw.next()
// { value: 'world', done: false }
hw.next()
// { value: 'ending', done: true }
hw.next()
// { value: undefined, done: true } |
Õâ¸öyield£¨²ú³ö£©ÀàËÆÓÚ֮ǰµÄreturn£¬Ö±¹ÛµÄÀí½â¾ÍÊÇÒ»¸öº¯Êý¿ÉÒÔ·µ»Ø¶à´ÎÁË£¬»òÕß˵º¯Êý¾ßÓС°Ë³Ðò״̬¡±£¬yieldÌṩÁËÔÝÍ£¹¦ÄÜ¡£ÕâÀïÎÒÏëд¸ö´úÂëÀ´ÑéÖ¤ÏÂÆÚÖеÄ×÷ÓÃÓò״̬£º
function* test(){
let i = 0;
setTimeout(function() {
i++;
}, 1000);
yield i;
yield i++;
return i
}
let t = test();
console.log(t.next());
setTimeout(function() {
console.log(t.next());
}, 2000);
console.log(t.next());
//{value: 0, done: false}
//{value: 0, done: false}
//{value: 2, done: true} |
֮ǰÎÒÃÇдһ¸ö³ÇÊм¶ÁªµÄ´úÂ룬¿ÉÄÜ»áÓÐЩÁîÈ˵°ÌÛ£º
$.get('getCity',
{id: 0}, function(province) {
let pid = province[0];
//¸ù¾ÝÊ¡id»ñÈ¡³ÇÊÐÊý¾Ý
$.get('getCity', {id: pid}, function(city) {
let cityId = city[0];
//¸ù¾ÝÊм¶id»ñÈ¡ÏØ
$.get('getCity', {id: cityId}, function(city)
{
//do smt.
});
});
}); |
Õâ¸ö´úÂë´ó¼ÒÓ¦µ±±È½ÏÊìϤÁË£¬ÓÃpromiseÄÜ´ÓÓï·¨²ãÃæ½â¾öһЩÎÊÌ⣬ÕâÀï¼òµ¥½éÉÜÏÂpromise¡£
Promise
PromiseÊÇÒ»ÖÖÒì²½½â¾ö·½°¸£¬ÓÐЩͬÊÂÈÏΪÆä³öÏÖ¾ÍÊÇΪÁËÎÒÃÇ´úÂë±äµÃ¸üºÃ¿´£¬½â¾ö»Øµ÷µØÓüµÄÓï·¨ÌÇ£¬ES6½«ÆäдÈëÁËÓïÒô±ê×¼£¬ÌṩÁËÔÉúPromise¶ÔÏó¡£PromiseΪһÈÝÆ÷£¬ÀïÃæ±£´æÒ첽ʼþµÄ½á¹û£¬ËûÊÇÒ»¸ö¶ÔÏó¾ßÓÐÈý¸ö״̬£ºpending£¨½øÐÐÖУ©¡¢fulfilled£¨Òѳɹ¦£©¡¢rejected£¨ÒÑʧ°Ü£©£¬ÕâÀﻹÊÇÀ´¸ö¼òµ¥´úÂë˵Ã÷£º
function timeout(ms)
{
return new Promise((resolve, reject) => {
setTimeout(resolve, ms, 'done');
});
}
timeout(100).then((value) => {
console.log(value);
}); |
ʵÀý»¯Promiseʱ£¬µÚÒ»¸ö»Øµ÷±ØÐëÌṩ£¬ÊǽøÐÐתΪ³É¹¦Ê±ºò»áÖ´ÐУ¬µÚ¶þ¸öÒ²ÊÇÒ»¸öº¯Êýʧ°Üʱºòµ÷Ó㬷DZØÐ룬ÕâÀïÀ´¸ödemo£º
let timeout =
function (ms) {
return new Promise(function (resolve) {
setTimeout(resolve, ms);
});
};
timeout(1000).then(function () {
return timeout(1000).then(function () {
let s = '´ó¼Ò';
console.log(s)
return s;
})
}).then(function (data) {
return timeout(1000).then(function () {
let s = data + 'ºÃ,';
console.log(s)
return s;
})
}).then(function(data) {
return timeout(1000).then(function () {
let s = data + 'ÎÒÊÇҶСîÎ';
console.log(s)
return s;
});
}).then(function(data) {
console.log(data)
}); |
Èç¹ûÎÒÃÇÇëÇóÓÐÒÀÀµµÄ»°£¬µÚÒ»¸öÇëÇóÒÀÀµÓÚµÚ¶þ¸öÇëÇ󣬴úÂë¾Í¿ÉÒÔÕâÑùд£º
let getData
= function(url, param) {
return new Promise(function (resolve) {
$.get(url, param, resolve );
});
}
getData('http://api.kuai.baidu.com/city/getstartcitys?callback=?').
then(function (data) {
console.log('ÎÒ»ñÈ¡ÁËÊ¡Êý¾Ý,ÎÒÃÇÂíÉϸù¾ÝÊ¡Êý¾ÝÉêÇëÊÐÊý¾Ý', data);
return getData('http://api.kuai.baidu.com/city/getstartcitys?callback=?').
then(function (data1) {
console.log(data1);
return 'ÎÒÊÇÊÐÊý¾Ý';
})
}).then(function(data) {
//Ç°ÃæµÄ²ÎÊý´«¹ýÀ´ÁË
console.log(data);
console.log('ÎÒ»ñÈ¡ÁËÊÐÊý¾Ý,ÎÒÃÇÂíÉϸù¾ÝÊÐÊý¾ÝÉêÇëÏØÊý¾Ý');
getData('http://api.kuai.baidu.com/city/getstartcitys?callback=?').
then(function (data1) {
console.log(data1);
});
})
20
let getData = function(url, param) {
return new Promise(function (resolve) {
$.get(url, param, resolve );
});
}
getData('http://api.kuai.baidu.com/city/getstartcitys?callback=?').
then(function (data) {
console.log('ÎÒ»ñÈ¡ÁËÊ¡Êý¾Ý,ÎÒÃÇÂíÉϸù¾ÝÊ¡Êý¾ÝÉêÇëÊÐÊý¾Ý', data);
return getData('http://api.kuai.baidu.com/city/getstartcitys?callback=?').
then(function (data1) {
console.log(data1);
return 'ÎÒÊÇÊÐÊý¾Ý';
})
}).then(function(data) {
//Ç°ÃæµÄ²ÎÊý´«¹ýÀ´ÁË
console.log(data);
console.log('ÎÒ»ñÈ¡ÁËÊÐÊý¾Ý,ÎÒÃÇÂíÉϸù¾ÝÊÐÊý¾ÝÉêÇëÏØÊý¾Ý');
getData('http://api.kuai.baidu.com/city/getstartcitys?callback=?').
then(function (data1) {
console.log(data1);
});
}) |

Èç´Ë±ã¿ÉÒÔ±ÜÃâ¶à²ãǶÌ×ÁË£¬¹ØÓÚPromiseµÄ֪ʶµã»¹ºÜ¶à£¬ÎÒÃÇÓöµ½¸´ÔӵŤ×÷³¡¾°ÔÙÄóöÀ´Ëµ°É£¬ÎÒ¶ÔËûµÄ¶¨Î»¾ÍÊÇÒ»¸öÓï·¨ÌÇ£¬½«Òì²½µÄ·½Ê½±ä³Éͬ²½µÄд·¨£¬¹Ç×ÓÀﻹÊÇÒì²½£¬ÉÏÃæÎÒÃÇÓÃPromise½â¾ö»Øµ÷µØÓüÎÊÌ⣬µ«Êǻص÷µØÓüÎÊÌâÓöµ½µÄ²»¶à£¬È´·¢ÏÖPromiseÒ»¶Ñthen¿´¼û¾ÍÓе㷳£¬ÎÒÃǵÄGeneratorº¯ÊýËÆºõ¿ÉÒÔÈÃÕâ¸öÇé¿öµÃµ½»º½â¡£
µ«ÊÇÔÝʱÔÚʵ¼Ê¹¤×÷ÖÐÎÒûÓÐÕÒµ½¸üºÃµÄʹÓó¡¾°£¬ÕâÀïÔÝʱµ½ÕâÀºóÃæ¹¤×÷Óöµ½ÔÙÏêÊö£¬¶ÔÕâ¿é²»ÊǺÜÊìϤҲ²»·Á°ÎÒÃÇʹÓÃES6д´úÂë¡£
´úÀí
´úÀí£¬Æäʵ¾ÍÊÇÄãÒª×öʲôÎÒ°ïÄã×öÁ˾ÍÐÐÁË£¬Ò»°ã´úÀíµÄÔÒò¶¼ÊÇ£¬ÎÒÐèÒª×öµãÊֽţ¬»òÕß¶àµã²Ù×÷£¬»òÕß×öµã¡°¸³ÄÜ¡±£¬ÈçÎÒÃdz£³£°ü×°setTimeoutÒ»°ã£º
let timeout =
function (ms, callback) {
setTimeout(callback, ms);
} |
ÎÒÃǰü×°setTimeoutÍùÍùÊÇΪÁËclearTimeoutµÄʱºòÄÜÈ«²¿ÇåÀíµô£¬Æäʵ¾ÍÊÇÀ¹½ØÏ£¬ES6ÌṩÁËProxy¹Ø¼ü´ÊÓÃÓÚÉèÖôúÀíÆ÷£º
var obj = new Proxy({}, {
get: function (target, key, receiver) {
console.log(`getting ${key}!`);
return Reflect.get(target, key, receiver);
},
set: function (target, key, value, receiver) {
console.log(`setting ${key}!`);
return Reflect.set(target, key, value, receiver);
}
});
obj.count = 1
// setting count!
++obj.count
// getting count!
// setting count!
// 2 |
//target²ÎÊý±íʾËùÒªÀ¹½ØµÄÄ¿±ê¶ÔÏó£¬handler²ÎÊýÒ²ÊÇÒ»¸ö¶ÔÏó£¬ÓÃÀ´¶¨ÖÆÀ¹½ØÐÐΪ
var proxy = new Proxy(target, handler); |
ÎÒÃÇÕâÀï¼ÌÐøÐ´Ò»¸ö¼òµ¥µÄdemo£º
let person =
{
constructor: function(name, age = 20) {
this.name = name;
this.age = age
},
addAge: function() {
this.age++;
},
getAge: function() {
return this.age;
}
}
var proxy = new Proxy(person, {
get: function(target, property) {
console.log(arguments);
return target[property];
},
set: function(target, property) {
console.log(arguments);
}
});
person.constructor('ҶСîÎ', 30);
console.log(person.age)
console.log(proxy.age) |

µ«ÊÇÔÝʱÎÒûÓз¢ÏֱȽϺõÄÒµÎñ³¡¾°£¬±ÈÈç˵£¬ÎÒÏÖÔÚÖØÐ´ÁËÒ»¸öʵÀýµÄget·½·¨£¬±ãÄÜÔÚÒ»¸öÈ«¾ÖÈÝÆ÷ÖмǼÕâ¸ö±»Ö´ÐÐÁ˶àÉٴΣ¬ÕâÀïÒ»¸öÒµÎñ³¡¾°ÊÇ£ºÎÒÒ»´Î¸öÒ³ÃæÁ¬Ðø·¢³öÁ˺ܶà´ÎÇëÇ󣬵«ÊÇÎÒµ¥Ò³Ó¦ÓÃ×öÒ³ÃæÌø×ªÊ±ºò£¬ÎÒÐèÒª½«ËùÓеÄÇëÇó¾ä±úÒÆ³ý£¬Õâ¸öËÆºõÒ²²»ÊÇ´úÀíÍê³ÉµÄ¹¤×÷£¬ÓÚÊÇҪʹÓÃES6д´úÂë£¬ËÆºõ¿ÉÒÔÔÝʱºöÂÔ´úÀí¡£
½áÓï
ÓÐÁËÒÔÉÏ֪ʶ£¬»ù±¾´Ó³ÌÐò²ãÃæ¿ÉÒÔʹÓÃES6д´úÂëÁË£¬µ«Êǹ¤³Ì²ãÃæ»¹ÐèÒªÒýÈëwebpackµÈ¹¤¾ß£¬ÕâЩÎÒÃÇÏ´νéÉܰɡ£
|