static关键字_ES6中static关键字使用

b7e4e2e360dce5071b2c210eb3d0ba9c.png

伴随着ES6的发布,javascript中正式的引入了class(类),让js中的面向对象更加的规范标准,同时给想跨语言发展的前端同学们提供了更高的台阶,因为,后端语言的OOP也是class,语法基本一致呀!惊不惊喜

1c3d1df62bc412ce0ee25da0bab2295e.png

今天我们就来撩一把class中的static关键字,咳咳...拿出你的小马扎,和笔记本开始了.....

前情回顾

想必各位前端的小伙伴们都知道,一般来书在class中只有属性和方法.都可以被实例化的对象进行调用,比如这样的.

  // 声明类
    class Boy {
      //定义属性
      info = '见过你的美,还能爱上谁?';
      // 定义方法
      say() {
        console.log('小姐姐,' + this.info);
​
      }
    }
    // 实例化类
    let b = new Boy;
    // 成功调用方法
    b.say();

结果

17590c829b8490905e4212e1ce3b173d.png

当我们再次声明一个使用static修饰的方法,使用实例化对象之后,你会发现

 // 声明类
    class Boy {
      //定义属性
      info = '见过你的美,还能爱上谁?';
      // 定义方法
      say() {
        console.log('小姐姐,' + this.info);
​
      }
      // static 修饰的方法
      static desc() {
        console.log('小姐姐,我看见你就犯困...');
​
      }
    }
    // 实例化类
    let b = new Boy;
    // 成功调用方法
    //b.say();
    // 调用static修饰的方法
    b.desc();
​

代码竟然报错了!!!这个方法不能被实例化后的对象调用

abeaf140d6e5dc677b5ddf495fa66330.png

不要着急,来来让我们一起揭开static神秘的面纱

敲黑板了,凡是被static修饰的属性和方法都是静态方法和属性,只能被类名调用,不能被实例化对象调用.同时也不能被子类继承,换句话说它属于当前这个类的.

6962b7f713e8c750ca6593ab248b8732.png

基本使用

使用static修饰属性和方法

    class A {
      // 静态属性
      static info = '见过你的美,还能爱上谁?';
      // 静态方法
      static love() {
        console.log('小姐姐,看见你就犯困,为情所困,为你所困!');
​
      }
    }
    // 直接使用类名调用
    console.log(A.info);
    A.love();

结果

7cb24943f109c48843a608b9a1f478e4.png

在普通的方法中使用,静态属性和静态方法,也必修使用类名进行调用

class A {
      // 静态属性
      static info = '见过你的美,还能爱上谁?';
      // 静态方法
      static love() {
        console.log('小姐姐,看见你就犯困,为情所困,为你所困!');
​
      }
      // 普通方法,调用静态属性
      say() {
        console.log('小姐姐,' + A.info);
​
      }
    }

600e96d0ef1d22b3bc9c7115a30641e0.png

也可以在普通方法中修改静态属性的值,使用类名直接调用即可

能被继承

extends的主要用于子类继承父类,继承之后子类拥有父类的的所有方法包括,静态方法和属性除外.

 class A {
      // 静态属性
      static info = '见过你的美,还能爱上谁?';
      // 静态方法
      static love() {
        console.log('小姐姐,看见你就犯困,为情所困,为你所困!');
​
      }
      // 普通方法,调用静态属性
      say() {
        console.log('小姐姐,' + A.info);
​
      }
    }
    class B extends A {
      run() {
        console.log('类B的方法..');
      }
    }
    //使用类名 父类中普通方法调用
    B.love();
​

f25d12ea4e95d70f9446b928371f3822.png

注意点

如果静态方法包含this关键字,这个this指的是类,而不是实例。

    class A {
      // 静态属性
      static info = '见过你的美,还能爱上谁?';
      // 静态方法
      static love() {
        //  console.log('小姐姐,看见你就犯困,为情所困,为你所困!');
        console.log(this);

        // 静态类中调用普通方法
        this.say();

      }
      // 普通方法,调用静态属性
      say() {
        console.log('小姐姐,' + A.info);

      }
    }

    A.love();

236126340e77b7e97af9007ba9f0b14b.png

分析:

上面代码中,静态方法love调用了this.say(),这里的this指的是A类,而不是A的实例,等同于调用A.say()

静态方法和普通方法是可以重名的,因为他们不属于同一个对象,像这样!

   class A {
      // 静态属性
      static info = '见过你的美,还能爱上谁?';
      // 静态方法
      static love() {
        console.log('小姐姐,看见你就犯困,为情所困,为你所困!');
        //  console.log(this);
​
      }
      // 普通方法,love
      love() {
        console.log('我是普通方法....');
​
      }
      // 普通方法,调用静态属性
      say() {
        console.log('小姐姐,' + A.info);
​
      }
​
​
    }
    // 静态的love方法
    A.love();
    // 实例化类
    let a1 = new A;
// 普通的love方法
    a1.love();

410fa3376ec6a892c3a88fe034277623.png

关于class中的static中的就说道这里,有啥疑问在评论区留下,地球不爆炸,解答不中断.....

7f68912b7cb1ad009b945958e89533ee.png
千锋HTML5学院:教你如何在vue中使用国际化​zhuanlan.zhihu.com
b1ba6f8ed1a3be79a750cbc13105f66b.png
千锋HTML5学院:axios的请求拦截和vue路由的导航守卫有什么区别​zhuanlan.zhihu.com
37080302920e10ef37e2bf4705c1eb51.png
千锋HTML5学院:redux-thunk的理解​zhuanlan.zhihu.com
2eeb03e7c7a276d9252ec709ceaf7f24.png
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值