js ES6學習筆記 Class(5)

2021-09-08 22:43:40 字數 1593 閱讀 1189

2、es6允許繼承原生建構函式定義子類,因為es6是先新建父類的例項物件this,然後再用子類的建構函式修飾this,使得父類的所有行為都可以繼承。下面是乙個繼承array的例子。

class myarray extends array 

}var arr = new

myarray();

arr[0] = 12;

arr.length //1

arr.length = 0;

arr[0] //

undefined

3、extends關鍵字不僅可以用來繼承類,還可以用來繼承原生的建構函式。因此可以在原生資料結構的基礎上,定義自己的資料結構。下面就是定義了乙個帶版本功能的陣列。

class versionedarray extends array 

commit()

revert()

}var x = new

versionedarray();

x.push(1);

x.push(2);

x //

[1, 2]

x.history //

x.commit();

x.history

//[, [1, 2]]

x.push(3);

x //

[1, 2, 3]

x.revert();

x //

[1, 2]

versionedarray結構會通過commit方法,將自己的當前狀態存入history屬性,然後通過revert方法,可以撤銷當前版本,回到上乙個版本。除此之外,versionedarray依然是乙個陣列,所有原生的陣列方法都可以在它上面呼叫。

4、與es5一樣,在class內部可以使用getset關鍵字,對某個屬性設定存值函式和取值函式,攔截該屬性的訪問行為。

存值函式和取值函式是設定在屬性的descriptor物件上的。

class customhtmlelement 

get html()

set html(value)

}var descriptor =object.getownpropertydescriptor(

customhtmlelement.prototype, "html");

"get" in descriptor //

true

"set" in descriptor //

true

5、如果某個方法之前加上星號(*),就表示該方法是乙個 generator 函式。

class foo 

*[symbol.iterator]()

}}for (let x of new foo('hello', 'world'))

//hello

//world

js ES6學習筆記 Class(2)

1 與函式一樣,類也可以使用表示式的形式定義。const myclass class me 這個類的名字是myclass而不是me,me只在class的內部 可用,指代當前類。如果類的內部沒用到的話,可以省略me,也就是可以寫成下面的形式。2 採用class表示式,可以寫出立即執行的class。le...

js ES6學習筆記 Proxy

1 proxy 用於修改某些操作的預設行為,等同於在語言層面做出修改,所以屬於一種 元程式設計 meta programming 即對程式語言進行程式設計。2 proxy 可以理解成,在目標物件之前架設一層 攔截 外界對該物件的訪問,都必須先通過這層攔截,因此提供了一種機制,可以對外界的訪問進行過濾...

js ES6學習筆記 Reflect

1 reflect物件與proxy物件一樣,也是 es6 為了操作物件而提供的新 api。reflect物件的設計目的有這樣幾個。2 reflect.get方法查詢並返回target物件的name屬性,如果沒有該屬性,則返回undefined。3 reflect.set方法設定target物件的na...