//把多元参数转换成一元参数的过程//任意参数转换成医院参数function add(a,b,c,d){return a+b+c+d;}//add();//函数的长度就是参数的个数//console.log(add.length);//处理多参数的curry,不定参数的curryfunction curry(add){return function curryFn(...args){if(add.length>args.length){//如果参数不够,就继续返还函数连续传入的参数return function(...args2){return curryFn(...args,...args2);}}else{//如果参数已经够了,直接执行函数返还函数结果return add(...args);}}}let mtadd = curry(add);console.log(myadd);let res = myadd(1)(2)(3)(4);console.log(res);
ES6 新增数据类型
//独一无二的值(随机生成一个唯一的id)//是一种类型,简单的数据类型//是一个内置对象,其构造函数返回一个原语let s = Symbol();console.log(s);//Symbol
//没有数位限制//直接创建let num = BigInt(2**53);console.log(num);//9007199254740992n//通过数字后面加nlet num = 100n;console.log(num); //100n//bigint运算只能和bigint运算
可选运算符/空合并运算符
//符号:?let obj = {name:'zhangsan',boj1:{myname:'lisi'},}console.log(obj?.name);//zhangsan//obj里面有没有name这个元素,有就打印出来,没有就undefined//合并空运算符 ??function fn(a,b){var a=a??1;var b=b??2;console.log(a,b);}fn('',0); //0fn(3,4); //3 4fn(undefined,null); // 1 2//有值就输出值,没值就输出运算符后面的,可以过滤空字符串
类
//ES6的类本质也是构造函数,只是提供了一种新的语法糖//直接把属性写外边,不需要this//支持get和setclass Person{constructor(){this.name='zhangsan';this.myfn();}fn(){console.log(this.name);}myfn(){console.log('myfn');}}let zhangsan = new Person();zhangsan.fn();
静态成员
//静态成员:属于类的 不属于 实例化对象的成员,不需要实例化class Person{static num = 0; //静态属性constructor(name){this.name = name;}static fn(){console.log('fn');//静态方法}}console.log(Person.num);Person.fn() //0 fn//单例模式:一个类只保证有一个实例class Person{//通过instance保存实例化的的状态static instance = null;constructor(name){this.name = name;if(!Person.instance){//没有实例化,通过Person.instance静态属性保存实例Person.instance = this;}else{//已经实例化过了,直接获取静态属性返还return Person.instance;}}}let zhangsan = new Person('zhangsan');let lisi = new Person('lisi');console.log(zhangsan,lisi)//只会返还zhangsan
私有成员
// ES6 私有// 私有成员 : 只能类的内部调用 ,子类 和外部都不能调用class Person{#weight="100kg"; // 私有属性constructor(name){this.name = name; // 公有成员this.age = 20}// 利用公有方法调用私有成员getWeight(){ // 公有方法,调取私有属性console.log("体重是?",this.#weight);}#fn(){console.log("私有方法")}}let zhangsan = new Person("张三");// console.log(zhangsan);// console.log(zhangsan.#weight);// zhangsan.#fn();zhangsan.getWeight();
类的继承
// ES6的继承 ;class Dad{constructor(name,age){this.name = name;this.age = age;}fn(){console.log("fn");}}// 子类继承父类 extends 关键字// 一旦写了 constructor 那么一定要调用super函数; super// super特征:/*1.super 不能单独使用,只能在 constructor 和 方法里2.super可以用于父类的传参3.必须要在使用this之前调用super4.如果 没有constructor 函数 那么 super可以省略*/class Son extends Dad{constructor(name,age){// console.log(super);super(name,age);this.height = "178cm";}myfn(){console.log("myfn");super.fn();}}let zhangsan = new Son("张三",20);console.log(zhangsan);// zhangsan.fn();zhangsan.myfn();
