箭头函数总结
Posted iiiLISA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了箭头函数总结相关的知识,希望对你有一定的参考价值。
箭头函数的特点:
1、箭头函数没有this,如果在箭头函数内部使用this,则this指向函数被定义时所在的作用域所指向的this;
2、不能作为构造函数
3、不能使用new操作符调用
4、没有prototype属性
5、不能使用call、apply、bind去改变this的指向(因为箭头函数没有this)
6、没有属于自己的arguments、super、new.target
不使用箭头函数的情况
1、对象的方法中不使用箭头函数
2、原型链中不使用箭头函数
3、构造函数不能使用箭头函数(原因见注)
注:构造函数通过new字符串生成对象实例
new操作符做的事:
(1)创建了一个新的对象obj
(2)new创建的对象指向了构造函数的原型对象:子对象.proto=父函数.prototype
(3)将构造函数中的this绑定到新建的对象obj上
(4)根据构造类型的返回类型做判断,如果是原始值则被忽略,如果是返回对象,需要正常处理。
附:
prototype与__proto__的区别
1.prototype是函数独有的,而__proto__是每个对象都会拥有的(包括函数)
2.prototype的作用是保存所有实例公共的属性和方法;__proto__的作用是当访问一个对象的属性时,如果内部没有该属性,就会在它的__proto__属性所指的那个父对象去找,父对象没有,再去父对象的父对象里找…直到null,即原型链.
3.s.proto === Student.prototype
prototype还有一个constructor属性,指向该对象的构造函数本身.
function Foo()
setTimeout( () =>
console.log(this.id);
, 100);
var id = 21;
var obj = id: 42
Foo(); //21,this指向window
Foo.call(obj); //42,this指向对象obj
// var Foo1 = () => ;
// var foo1 = new Foo1(); // TypeError: Foo1 is not a constructor
//对象的方法中不使用箭头函数
var name1='李峋';
const obj1 =
name1: 'syvia',
getName()
return this.name1;
,
getName1: () =>
return this.name1;
console.log('普通函数',obj1.getName());//syvia
console.log('箭头函数',obj1.getName1());//李峋
// 原型方法中不使用箭头函数
const obj2=
name2:'李峋'
;
var name2='朱韵';
obj2.__proto__.getName=function()
return this.name2;
;
obj2.__proto__.getName1=()=>
return this.name2;//指向window
console.log(obj2.getName());//李峋
console.log(obj2.getName1());//朱韵
/**
* 使用 let 在全局作用域中声明的变量不会成为 window 对象的属性,
* var 声明的变量则会(不过,let 声明仍然是在全局作用域中发生的,
* 相应变量会在页面的生命周期内存续,所以使用window访问会为undefined):
*
*/
let num = 11; //换成var num=11;则输出11
const obj4 =
num: 22,
fn1: () =>
let num = 33;
const obj5 =
num: 44,
fn2: () =>
console.log(this.num);
obj5.fn2();
obj4.fn1();//undefined
/**箭头函数不能使用arguments参数
* 但是可以包装在普通函数中传给箭头函数**/
let sum = function()
return arguments.length;
var len=sum(1,2,3);
console.log(len);//3
let foo2=function()
let bar=()=>
console.log(arguments.length);
bar();
;
foo2(5,5,5,6);//4
foo2.bar(34,2);//传给bar是错误的。
let sum1=()=>
return arguments.length;
var len1=sum1(1,2);
console.log(len1);//Uncaught ReferenceError: arguments is not defined at sum1
很好的借鉴:https://www.jianshu.com/p/e3e4f2d64aeb
以上是关于箭头函数总结的主要内容,如果未能解决你的问题,请参考以下文章