ES6-arrows

2018-01-29 16:34:48 浏览数 (1)

从今天开始记录学习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;
    });
};
  1. 利用数组方法最后可以传入参数
代码语言:javascript复制
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;
    });
};

0 人点赞