箭头函数是普通函数的简写,可以更优雅的定义一个函数,与普通函数相比,主要有以下几点差异:
- 1.函数体内的this对象,就是定义时所在的作用域中的 this 值,而不是使用时所在的对象;
- 2.不可以使用arguments对象,该对象在函数体内不存在,如果要用,可以用rest参数代替;
- 3.不可以使用yield命令,因此箭头函数不能用作Generator 函数;
- 4.不可以使用new命令,因为:
- 箭头函数没有自己的this, 无法调用call, apply;
- 没有prototype属性,而new命令在执行时需要将构造函数的prototype赋值给新的对象的__proto__属性
new一个对象的大体过程如下:
function newFunc(father, ...rest) {
var result = {}; // 新建一个空对象
result.__proto__ = father.prototype; // 新对象的__proto__属性指向构造函数的prototype属性
var result2 = father.apply(result, rest); // 改变this指向
if (
(typeof result2 === 'object' || typeof result2 === 'function') &&
result2 !== null
) {
return result2; // 返回新对象
}
return result; // 返回新的对象
}