ES6中的class 與prototype


 一、定義構造函數  

在以前的js中,生成一個對象實例,需要先定義構造函數,然后通過prototype 的方式來添加方法,在生成實例:

      

function Person(){
       this.name = "測試"this.age = 26;
}

 Person.prototype.getName = function(){
             console.log("name:" + this.name)

}

var  p = new Person()

 

然而系現在的ES6

class Person{
     constructor(name, age){
                this.name = name;
                this.age = age;
           }
     getName() {
                return this.name;
           }
}

var p = new Person("luoqiang",26)

在ES5中原本的構造函數被constructor 替代,本來需要定義在prototype上面的,方法直接定義在class里面即可。

ES6中的類的數據類型就是函數,類本身指向構造函數,使用的時候也需要new命令。

類中所有的方法都定義在類的prototype屬性上面。

 

class B {}
let b = new B();

b.constructor === B.prototype.constructor // true

 

二、Class 的靜態方法

   ES6 中類有靜態方法,即一個方法前加上static關鍵字,就表示該方法不會被實例繼承,而是直接通過類來調用。

        

class Food {
static classMethod() {
   return 'hello'
}
}

Food.classMethod() // "hello"

var poo = new Food();
poo.classMethod() // TypeError: poo.classMethod is not a function

  通過類直接調用,輸出的是hello,實例化以后不能調用。

  PS:

    在react、 RN中,this.state ={} 這種寫法是在constructor 里面定義實例屬性。

    

class ReactCounter extends React.Component {
  state;
  constructor(props){
    super(props);
     this.state = {
        count:0
  }
 }
}

    super(props)是繼承父類的props 屬性,state是在子類中定義實例屬性。

 

三、class 繼承

以前的繼承方式:

function Person(name,age){
           this.name = name;
           this.age = age;
}
 Person.prototype.getName = function(){
         console.log("name:" + this.name);
}
 
 function Stu(stu_class,name,age){
         Person.call(this,name,age);
         this.stu_class=stu_class;
}
 
 Stu.prototype=new Person;
 Stu.prototype.constructors=Stu;
 Stu.prototype.getClass=function(){
        console.log("班級:" + this.stu_class)
}

// 得到一個學員信息對象

var s= new Stu()
console.log(s)

ES6的繼承:

 

   class Person{
constructor(name, age){
this.name = name; this.age = age; } getName(){ return this.name; } } class Student extends Person{ constructor(stu_class,name,age){
//需注意如果一個子類繼承父類,必須調用super,才能使用constructor,使用this
super(name,age)
}
getClass(){

console.log("班級:"+this.stu_class)
}
}


var p=new Person("luoqiang",26)
console.log(p)

 

注意點:

Class 定義方法是不能使用箭頭函數

Class 也可以使用表達式方式聲明

 

參考:https://blog.csdn.net/luoqiang0831/article/details/79641133


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM