es6 class静态方法以及继承

es6 class写法以及继承

写法
通过使用class关键字,定义一个类;定义“类”的方法的时候,前面不需要加上function这个关键字,直接把函数定义放进去了就可以了。另外,方法之间不需要逗号分隔,加了会报错。
class内的方法必须通过new关键字之后才能调用,若直接调用则会报错。使用new关键字后,和es5构造函数相同;

class Father{
       constructor(){
            this.name = '小明'
        }
        children(){
            return `姓名:${this.name}`
        }
    }
   console.log(Father.children()) //报错
   let p = new Father()
   console.log(p.children()) //姓名:小明
   
//还可以写成这样
class Father{
     constructor(){
           this.name = '小明'
       }
   }
   Father.prototype.children = function(){
     return `姓名:${this.name}`
   }
   console.log(Father.children()) //报错
   let p = new Father()
   console.log(p.children()) //姓名:小明

当面试官询问不通过new关键字怎么调用class内方法时候,我们可以告诉他通过prototype也是可以调用的

 class Father{
  constructor(){
           this.name = '小明'
        }
        children(){
            return `姓名:${this.name}`
        }
    }
 console.log('prototype',Father.prototype.children()) //prototype 姓名:undefined

class内也可以通过static来定义自己的静态方法和静态属性,则该方法/属性不会被实例继承,而是直接通过类来调用

 class Father{
  static age = 18;
  constructor(){
           this.name = '小明'
       }
      static children(){
           return `姓名:三儿`
       }
   }
   console.log(Father.children()) //姓名:三儿
   console.log(Father.age) //姓名:18

   let p = new Father()
   console.log(p.age) //undefined
   console.log(p.children()) //报错

继承
class在继承时使用extends关键字,子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象。

//没有调用super方法
class Father{
   constructor(){
         this.name = '小明'
         this.age = 18
     }
     getname(){
         return `姓名:${this.name}`
     }  
   }
   class Children extends Father{
       constructor(){
		//没有调用super方法
       }
       getage(){
         return `年龄:${this.age}`
       }
   }  
  let p1 = new Children() //报错
//使用super方法
class Father{
        constructor(){
            this.name = '小明'
            this.age = 18
        }
        getname(){
            return `姓名:${this.name}`
        }  
      }
      class Children extends Father{
          constructor(){
            super()
          }
          getage(){
            return `年龄:${this.age}`
          }
      }  
      let p1 = new Children()
      console.log(p1.getname()) //姓名:小明
      console.log(p1.getage()) //年龄:18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值