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 arraycommit()
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內部可以使用get
和set
關鍵字,對某個屬性設定存值函式和取值函式,攔截該屬性的訪問行為。
存值函式和取值函式是設定在屬性的descriptor物件上的。
class customhtmlelementget 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...