从今天开始记录学习ES6的知识点,这次学习的是新增:Arrow functions
Arrows以=>为简写形式,特点:
- 语法简洁
- 文法固定的this对象
- 总是匿名函数
语法:
代码语言:javascript复制() => { ... } // no parameter
x => { ... } // one parameter, an identifier
(x, y) => { ... } // several parameters
例子:
arrows
代码语言:javascript复制var odds = evens.map(v => v 1);
常规函数
代码语言:javascript复制var odds = evens.map(function(v){return v 1});
用途:
代码语言:javascript复制function Prefixer(prefix) {
this.prefix = prefix;
}
Prefixer.prototype.prefixArray = function (arr) { // (A)
'use strict';
return arr.map(function (x) { // (B)
// Doesn’t work:
return this.prefix x; // (C)
});
};
在严格模式下,匿名函数中的this的值为undefined,这也就是为何上面的例子会报错。
解决方法:
常规方法
1.
代码语言:javascript复制function Prefixer(prefix) {
this.prefix = prefix;
}
Prefixer.prototype.prefixArray = function (arr) {
var that = this; // (A)
return arr.map(function (x) {
return that.prefix x;
});
};
- 利用数组方法最后可以传入参数
function Prefixer(prefix) {
this.prefix = prefix;
}
Prefixer.prototype.prefixArray = function (arr) {
return arr.map(function (x) {
return this.prefix x;
}, this); // (A)
};
3.
代码语言:javascript复制function Prefixer(prefix) {
this.prefix = prefix;
}
Prefixer.prototype.prefixArray = function (arr) {
return arr.map(function (x) {
return this.prefix x;
}.bind(this)); // (A)
};
arrows
代码语言:javascript复制function Prefixer(prefix) {
this.prefix = prefix;
}
Prefixer.prototype.prefixArray = function (arr) {
return arr.map((x) => {
return this.prefix x;
});
};