先来看下面的例子:

name='aaa';
let obj={
    name:'bbb',
    getName1(){
        console.log(this.name);
    },
    getName2:()=>{
        console.log(this.name);
    }
}
obj.getName1();
obj.getName2.apply({name:'ccc'});

题目也比较简单,大家可先猜猜结果是什么,下面会讲一些es6箭头中的注意点。

es6箭头函数的this

es6箭头函数的this还是比较容易搞混,上面的题目中getName2为什么this绑定了{name:'ccc'}还是无法输出'ccc'呢?因为箭头函数是无法用apply,call绑定this的,但是apply,call仍然是可以使用的,只不过会忽略第一个参数而已:

let obj={
    getName2:(firstName,lastName)=>{
        console.log(firstName,lastName);
    }
}
obj.getName2.call('','zhang','san');//忽略第一个参数

一般我们看到的对箭头函数有效的绑定this都是绑定它上层的方法,而不是直接绑定在箭头函数身上:

let obj={
    name:'bbb',
    getName2(){
        (()=>{
            console.log(this.name);
        })();
    }
}
obj.getName2.call({name:'ccc'});

箭头函数的自执行

普通函数的自执行方法比较多,一般有以下几种:

//方法一
(function(name){console.log(name);}('baby'))
//方法二
(function(name){console.log(name);})('baby')
//方法三系列
+function(name){console.log(name);}('baby')
-function(name){console.log(name);}('baby')
!function(name){console.log(name);}('baby')
void function(name){console.log(name);}('baby')

箭头函数的自执行方法就好像就只有一种(目前只看到这种):

((name)=>{console.log(name);})('baby')

箭头函数和Generator函数

我们都知道箭头函数不能new的,因为它没有[[Construct]]内部方法;同时,它也无法作为Generator函数,因为Generator函数返回的遍历器继承了Generator函数的prototype对象上的方法,而箭头函数没有prototype内部方法,同样,箭头函数里面还不能有yield关键字,因为yield是属于Generator函数的。

但是Generator函数里面是可以用箭头函数的:

function* gen(){
    yield new Promise((resolve,reject)=>{
        resolve('ok');
    });
}
let g=gen();
回到顶部
我要评论

所有评论

返回
邮箱:
绑定
取消
×

我要评论

回复:

昵称:(昵称不超过20个字)

图片:

邮箱:
绑定邮箱后,若有回复,会邮件通知。
提交
还可以输入500个字