箭头函数 -- 新增函数
1.定义:使用=>定义的函数
2.格式:
1.常规格式 ([arg1,arg2=defalutVal...])=>{ //code [return val]; } 2.只有一个参数的 var foo = x => {} 3.只有返回值 let foo = () => val 4.只有一个参数且只有返回值 let foo =x => val 5.函数体只有一个值但是并不希望将值作为返回值 let foo = () => void val 函数表达式、回调函数参数、 //箭头函数 let foo = (x,y=1) =>{ return x + y; } console.log(foo(5)); //6 //等价于 let foo2 = function(x , y = 1){ return x + y; } console.log(foo2(5)); //6 //只有一个参数的箭头函数 let foo3 = x => { return x + 1; } console.log(foo3(4)); //5 //函数体只有一个返回值的箭头函数 let foo4 = (x) => x+1; console.log(foo4(7)); //8 //只有一个参数并且函数体只有一个返回值的箭头函数 let foo5 = x => x+1; console.log(foo5(9)); //10 //函数体只有一个值并不想作为返回值时的箭头函数 let foo6 = x => void foo5(3); console.log(foo6(1)); // undefined
3.注意:箭头函数this
指向不同 -- 指向定义时所在的上层对象
ES6
面向对象
1.class
关键字:定义类 -- es5
中为构造函数
2.语法格式:
class Person { attr = val ; //实例属性 static attr = val;//静态属性 #attr = value; //私有属性 constructor(){ //构造方法,必须要有,默认返回this this.x = x; //实例属性 this.f = f; //实例方法 -- f的实参是一个函数 } get attr(){return val;} //attr就是属性名 set attr(val){} funName(){} //原型方法 static funName(){} //静态方法 #funName(){} //私有方法 } Object.assign(Person.prototype,{attr:val}); //原型属性
3.调用(实例化):new Person()
4.继承
class Son extends Parent{ constructor(){ super(); //调用父类的构造函数,父类的参数作为super的参数 this.x = 1; //必须先调用super再才能调用本身的this } }
5.继承要注意的点:①子类可以不写constructor,但是写了constructor就必须先调用super()
②可继承:实例属性及方法、原型属性及方法、静态属性及方法
③不可继承:私有属性及方法