1. 程式人生 > 其它 >2021-01-22

2021-01-22

技術標籤:javascript

JavaScript面向物件

類constructor建構函式

constructor0方法是類的建構函式(預設方法) ,用於傳遞引數返回例項対象,通過new命令生成対象例項吋自動凋用該方法。如果沒有顯示定義,類內部會自動給我們建立一個constructor();
建立類:

 //(1)通過class 關鍵字建立類,類名我們還是習慣性定義首字母大寫
        //(2)類裡面有個constructor函式,可以接受傳遞過來的引數,同時返回例項物件
        /* (3) constructor 函式只要new生成例項時,就會自動呼叫這個函式,如果我們不寫這個函式,類
        也會自動生成這個函式 */
class Star{ constructor(uname,age){ this.uname=uname; this.age=age; } } //(4) 生成例項new不能省略 /* (5)最後注意語法規範,建立類類名後面不要加小括號生成例項類名後面加小括號,建構函式不需 要加function */ var ldh=new Star("劉德華",19); var zxy=new Star("張學友"
,18); console.log(ldh); console.log(zxy);

類的繼承

class Father {
            say() {
                console.log("我是爸爸");
            }
        }
        class Son extends Father{//這樣子類就繼承了父類的屬性和方法
            say(){
                super.say();//super呼叫了父類的方法
                console.
log("我是兒子"); } } var sons=new Son(); sons.say(); //1.継承中,如果例項化子類輸出一個方法,先看子類有沒有這個方法,如果有就先執行子類的 //2.継承中,如果子類裡面沒有,就去査找父類有沒有這個方法,如果有,就執行父類的這個方法(就近原則) //super關鍵字用於訪問和呼叫物件父類上的函式。可以呼叫父類的建構函式,也可以呼叫父類的普通函式。

super關鍵字用於訪問和呼叫父類上的函式,可以呼叫父類的建構函式,也可以呼叫父類的普通函式
例:super呼叫父類的建構函式

class Father {
            constructor(x,y){
                this.x=x;
                this.y=y;
            }
            sum1(){
                  console.log(this.x+this.y);
                }
        }
        class Son extends Father{
            constructor(x,y){
                   //利用super呼叫父類的建構函式而且必須在子類this之前呼叫
                   super(x,y)
                this.x=x;
                this.y=y;
            }
            sum2(){
                console.log(this.x-this.y);
            }
           
        }
        var sons=new Son(5,3);
        sons.sum1();
        sons.sum2();

利用super呼叫父類的建構函式而且必須在子類this之前

this指向問題

var that;
        class Star{
            constructor(uname,age){
                // constructor裡面的this指向的是建立的例項物件
                that=this;
                console.log(this);
                this.uname=uname;
                this.age=age;
                this.btn=document.querySelector("button");
                this.btn.onclick=this.sing;
            }
            sing(){
                //因為sing被btn呼叫了,所以這個this指向btn
                console.log(this);
                console.log(that.uname);
            }
            dance(){
                //這個this被son呼叫了,所以this指向例項物件son
                console.log(this);
            }
        }
        var son=new Star("劉德華");
        son.dance();
         1.在ES6中類沒有変量提升,所以必須先定義類,才能通過類例項化物件
        //2.類裡面的共有的屬性和方法一定要加this使用.