1. //把多元参数转换成一元参数的过程
  2. //任意参数转换成医院参数
  3. function add(a,b,c,d){
  4. return a+b+c+d;
  5. }
  6. //add();
  7. //函数的长度就是参数的个数
  8. //console.log(add.length);
  9. //处理多参数的curry,不定参数的curry
  10. function curry(add){
  11. return function curryFn(...args){
  12. if(add.length>args.length){
  13. //如果参数不够,就继续返还函数连续传入的参数
  14. return function(...args2){
  15. return curryFn(...args,...args2);
  16. }
  17. }else{
  18. //如果参数已经够了,直接执行函数返还函数结果
  19. return add(...args);
  20. }
  21. }
  22. }
  23. let mtadd = curry(add);
  24. console.log(myadd);
  25. let res = myadd(1)(2)(3)(4);
  26. console.log(res);

ES6 新增数据类型

  1. //独一无二的值(随机生成一个唯一的id)
  2. //是一种类型,简单的数据类型
  3. //是一个内置对象,其构造函数返回一个原语
  4. let s = Symbol();
  5. console.log(s);//Symbol
  1. //没有数位限制
  2. //直接创建
  3. let num = BigInt(2**53);
  4. console.log(num);//9007199254740992n
  5. //通过数字后面加n
  6. let num = 100n;
  7. console.log(num); //100n
  8. //bigint运算只能和bigint运算

可选运算符/空合并运算符

  1. //符号:?
  2. let obj = {
  3. name:'zhangsan',
  4. boj1:{
  5. myname'lisi'
  6. },
  7. }
  8. console.log(obj?.name);//zhangsan
  9. //obj里面有没有name这个元素,有就打印出来,没有就undefined
  10. //合并空运算符 ??
  11. function fn(a,b){
  12. var a=a??1;
  13. var b=b??2;
  14. console.log(a,b);
  15. }
  16. fn('',0); //0
  17. fn(3,4); //3 4
  18. fn(undefined,null); // 1 2
  19. //有值就输出值,没值就输出运算符后面的,可以过滤空字符串

  1. //ES6的类本质也是构造函数,只是提供了一种新的语法糖
  2. //直接把属性写外边,不需要this
  3. //支持get和set
  4. class Person{
  5. constructor(){
  6. this.name='zhangsan';
  7. this.myfn();
  8. }
  9. fn(){
  10. console.log(this.name);
  11. }
  12. myfn(){
  13. console.log('myfn');
  14. }
  15. }
  16. let zhangsan = new Person();
  17. zhangsan.fn();

静态成员

  1. //静态成员:属于类的 不属于 实例化对象的成员,不需要实例化
  2. class Person{
  3. static num = 0; //静态属性
  4. constructor(name){
  5. this.name = name;
  6. }
  7. static fn(){
  8. console.log('fn');//静态方法
  9. }
  10. }
  11. console.log(Person.num);
  12. Person.fn() //0 fn
  13. //单例模式:一个类只保证有一个实例
  14. class Person{
  15. //通过instance保存实例化的的状态
  16. static instance = null;
  17. constructor(name){
  18. this.name = name;
  19. if(!Person.instance){
  20. //没有实例化,通过Person.instance静态属性保存实例
  21. Person.instance = this;
  22. }else{
  23. //已经实例化过了,直接获取静态属性返还
  24. return Person.instance;
  25. }
  26. }
  27. }
  28. let zhangsan = new Person('zhangsan');
  29. let lisi = new Person('lisi');
  30. console.log(zhangsan,lisi)
  31. //只会返还zhangsan

私有成员

  1. // ES6 私有
  2. // 私有成员 : 只能类的内部调用 ,子类 和外部都不能调用
  3. class Person{
  4. #weight="100kg"; // 私有属性
  5. constructor(name){
  6. this.name = name; // 公有成员
  7. this.age = 20
  8. }
  9. // 利用公有方法调用私有成员
  10. getWeight(){ // 公有方法,调取私有属性
  11. console.log("体重是?",this.#weight);
  12. }
  13. #fn(){
  14. console.log("私有方法")
  15. }
  16. }
  17. let zhangsan = new Person("张三");
  18. // console.log(zhangsan);
  19. // console.log(zhangsan.#weight);
  20. // zhangsan.#fn();
  21. zhangsan.getWeight();

类的继承

  1. // ES6的继承 ;
  2. class Dad{
  3. constructor(name,age){
  4. this.name = name;
  5. this.age = age;
  6. }
  7. fn(){
  8. console.log("fn");
  9. }
  10. }
  11. // 子类继承父类 extends 关键字
  12. // 一旦写了 constructor 那么一定要调用super函数; super
  13. // super特征:
  14. /*
  15. 1.super 不能单独使用,只能在 constructor 和 方法里
  16. 2.super可以用于父类的传参
  17. 3.必须要在使用this之前调用super
  18. 4.如果 没有constructor 函数 那么 super可以省略
  19. */
  20. class Son extends Dad{
  21. constructor(name,age){
  22. // console.log(super);
  23. super(name,age);
  24. this.height = "178cm";
  25. }
  26. myfn(){
  27. console.log("myfn");
  28. super.fn();
  29. }
  30. }
  31. let zhangsan = new Son("张三",20);
  32. console.log(zhangsan);
  33. // zhangsan.fn();
  34. zhangsan.myfn();