箭头函数**6**没有

145 阅读1分钟

****\

1、没有this 

箭头函数没有 this,所以需要通过查找作用域链来确定 this 的值。这就意味着如果箭头函数被非箭头函数包含,this 绑定的就是最近一层非箭头函数的 this。,因为箭头函数没有 this,所以也不能用 call()、apply()、bind() 这些方法改变 this 的指向,可以看一个例子: 

var value = 1; 
var result = (() => this.value).bind({value: 2})(); 
console.log(result); // 1 

2、没有arguments 

箭头函数没有自己的 arguments 对象,这不一定是件坏事,因为箭头函数可以访问外围函数的。通过命名参数或者 rest 参数的形式访问参数 

3、没有new关键字调用 

箭头不能被用作构造函数,如果通过 new 的方式调用,会报错 

var Foo = () => {}; 
var foo = new Foo(); // TypeError: Foo is not a constructor 

4、没有new.target 

因为不能使用 new 调用,所以也没有 new.target 值。关于 new.target,可以参考 es6.ruanyifeng.com/#docs/class… 

5、没有原型 

由于不能使用 new 调用箭头函数,所以也没有构建原型的需求,于是箭头函数也不存在 prototype 这个属性。 

var Foo = () => {}; 
console.log(Foo.prototype); // undefined 

6、没有super 

连原型都没有,自然也不能通过 super 来访问原型的属性,所以箭头函数也是没有 super 的,不过跟 this、arguments、new.target 一样,这些值由外围最近一层非箭头函数决定。