ES6問答-class用法

對抗遺忘的方法是複習你的筆記
看過去的內容立刻就會忘記,用這種問答的方式記錄下重點內容,複習的時候,就不用把一篇長文章從頭看起。javascript

clsss用法:

前置例子:java

class Point {
    constructor(x,y){
        Object,assign(this, {x, y}) // 以前一版這裏寫錯了 Object.assign(this, x, y), Object.assign裏的參數是對象
    }
    toString(){
        return `${this.x}, ${this.y}` // 類的方法裏,使用this訪問類的屬性
    }
}
// 實例
let point = new Point(3, 4)
  1. 實例是什麼類型?類和實例有什麼關係?函數

    實例是對象類型。用 Object.prototype.call(point)打印出來的結果是 "[object Object]"this

    實例全稱是類的實例。類至關於實例的構造函數。可是和構造函數相比,只能經過new方法調用,不能自執行。構造函數就是普通函數加一個new修飾符。prototype

    point.__proto__ === Point.prototype // true

    以上等式在構造函數和實例之間,也是成立的。以下:code

    let f = function (){
        this.a = 1
        this.b = 2
    }
    let o = new f()
    o.__proto__ === f.prototype //true
  2. 實例的屬性哪些是本身的,哪些是原型的?判斷屬性是不是本身的用對象的什麼方法?對象

    定義在this上的屬性就是本身的。其餘的,就是原型的。繼承

    用hasOwnProperty( )方法判斷屬性是否在對象自身ip

    point.hasOwnProperty("toString") // false
    point.__proto__.hasOwnProperty("toString") // true
  3. 實例如何訪問定義在類上的方法?get

    類上定義的方法,實例能夠直接訪問

    point.toString() // "3,4"
  4. 如何給類的某個屬性設置存值和取值函數?

    在類的內部使用set和get,對某個屬性設置存值函數和取值函數

    javascript
    class MyClass {
        constructor() {
         // ...
        }
        get prop() {
         return 'getter';
        }
        set prop(value) {
         console.log('setter: '+value);
        }
    }
  5. 類的屬性名錶達式是什麼,怎麼寫的?

    類的屬性名用表達式來寫。將變量寫在方括號裏,以下:

    let methodName = "something"
       [methodName](){
       
       }
  6. 類能夠用表達式形式定義嗎?寫一個當即執行的類

    能夠。

    let person = new class Me{
        constructor(name){
            this.name = name
         } 
         sayName(){
            consle.log(this.name)
         }
     }("joy")
  7. ES6內部還須要用use strict嗎?

    不須要。ES6 實際上把整個語言升級到了嚴格模式。

  8. 類有變量提高嗎?

    沒有。所以子類要定義在父類後面。

  9. 類的name屬性怎麼取? 類對外是用的什麼符號?

    name是class後面的變量名。類對外的符號是等號左邊的變量。

    let myPoint = class Point{}
    myPoint.name  // Point
    // myPoint指代了Point類
  10. 如何判別Generator方法?

    某方法以前加了星號(*),表示該方法是geneator函數

  11. 類的方法中的this指向的是什麼?若是將方法單獨提出來呢?怎麼讓this指向實例?

    類的方法的this指向的是類實例。若是單獨提出來指向的是undefined。讓this指向實例有3種方法: ①構造函數綁定this(函數的bind方法) ②用箭頭函數 ③用proxy,獲取方法的時候,自動綁定this

  12. 什麼是靜態方法,舉例說明?如何調用靜態方法?

    一個方法前加了static,它就是靜態方法。以下:

    class Foo{
     static classMethod(){
        return "hello"
     }
    }
    Foo.classMethod() //靜態方法在類上調用

    靜態方法直接經過類來調用

  13. 類中定義的方法,都會被實例繼承嗎?

    類中定義的非靜態方法都會被實例繼承。

  14. 靜態方法中的this,指向什麼?

    指向類

  15. 實例的屬性除了寫在constructor中,還能寫在哪裏?

    寫在constructor 或者寫在頂層,效果同樣。

  16. 靜態屬性如何定義?

    寫在類的外面 Foo.prop = 1或者在屬性前加static修飾符 static prop= 2

  17. 什麼是私有屬性和私有方法? 如何區別他們和別的屬性或方法。

    私有方法和私有屬性,是隻能在類的內部訪問的方法和屬性,外部不能訪問。私有屬性的方法:

    ①命名區別 ②方法移除到模塊外 ③利用Symbol值的惟一

    私有屬性的提案:

    在屬性和方法前面加#,表示私有

  18. new.target屬性的應用場景?

    ES6 爲new命令引入了一個new.target屬性,該屬性通常用在構造函數之中,返回new命令做用於的那個構造函數。

    能寫出不能獨立使用、必須繼承後才能使用的類

    class Shape {
      constructor() {
       if (new.target === Shape) {
         throw new Error('本類不能實例化');
       }
      }
    }
    class Rectangle extends Shape {
      constructor(length, width) {
       super();
       // ...
      }
    }
    var x = new Shape();  // 報錯
    var y = new Rectangle(3, 4);  // 正確
相關文章
相關標籤/搜索