ES6之類語法(Classes)

2021-08-10 11:54:15 字數 2625 閱讀 2979

目錄:

用法:class name

class

people

say().`);

}}const kobe = new people('kobe', 'man');

kobe.say(); // hello! i am kobe.

用法:class subclass extends superclass {}

class

point2d

tostring(), $)`;

}}class

point3d

extends

point2d

tostring(), $, $)`;

}}

es2015 的繼承語法同樣可以將以前使用的構建函式模擬的類作為父類來繼承,而並非只有 class 語法定義的類才可以使用。

function

cat()

cat.prototype.yell = function()}

class

tiger

extends

cat}

const tiger = new tiger();

console.log(tiger.yell()); //aoh

console.log(tiger.climb()); //i can climb

需要非常注意的是,如果乙個子類繼承了乙個父類,那麼在子類的constructor 建構函式中必須使用super 函式呼叫父類的建構函式後才能在子類的 constructor 建構函式中使用this,否則會報出 this is not defined 的錯誤。

class

fooclass

barextends

foo}new bar(); // referenceerror: this is not defined

這個問題在除 constructor 建構函式以外的方法中並不會出現,即便在子類的建構函式中並沒有呼叫 super 函式,在其他方法中依然可以呼叫 this 來指向當前例項

const list = ,

get last(),

getvalue()

}list.new = 1;

list.new = 2;

list.new = 3;

console.log(list.last); // 1

console.log(list.value); // [1, 2, 3]

用法:class name }

class

people

say()`);

}static extend(constructor, ..._args)}}

}const player = people.extend(function

(name), 24);

const kobe = new player("kobe");

kobe.say(); // hello! i am no.24

console.log(kobe.name); // kobe

es6的類語法雖然可以與以前的原型一起使用,但是他們之間也是有一定區別的

函式有兩種定義方法:宣告式定義式

// 宣告式

function

foo(){}

// 定義式

const bar = function

(){}

而宣告式的函式定義是可以被提公升的(hoisting),即在宣告式函式所在的作用域開始執行時,無論是否已經執行到這個函式的**,都可以對這個函式進行訪問和使用。

const val = (function

()})();

console.log(val); // foobar

這個特性同樣適用於利用原型定義的類,但對於 es6 的類語法來說這個特性是無效的。

const point = new point(1, 2);   // referenceerror

class

point

}

這是因為從邏輯角度上看,類的繼承必須是單向的,不可能出現 a 類繼承於 b 類的同時 b 類也繼承於 a 類的現象,這就意味著,父類必須在子類定義之前被定義。

不支援私有屬性(private)。

不支援例項屬性,但目前可以通過 getter/setter 實現。

不支援多重繼承。

暫時沒有類似協議(protocol)和介面(inte***ce)等的概念。

es6 基本語法

es6規定暫時性死區和let const語句不出現變數提公升,主要是為了減少執行時錯誤,防止在變數宣告前就使用這個變數,從而導致意料之外的行為。這樣的錯誤在 es5 是很常見的,現在有了這種規定,避免此類錯誤就很容易了。總之,暫時性死區的本質就是,只要一進入當前作用域,所要使用的變數就已經存在了,但...

ES6語法總結

1 物件的寫法 es5中物件 es6中物件 注意這種寫法的屬性名稱和值變數是同乙個名稱才可以簡寫,否則要想es5那樣的寫法,例如 2 在物件中的方法的寫法 es5中物件 substrict function es6中物件 substrict 3 物件的匯出寫法 es5兩種形式 1 module.ex...

ES6 基礎語法

1 var vs let const var 可以定義全域性變數,與之不同,let的重要特性就是提供了塊級作用域和不具備變數提公升。const主要用於定義常量,常量顧名思義不是變數,意思就是一經定義,值就無法改變。首先弄明白塊級作用域 es5中有全域性作用域與函式作用域,塊級作用域是es6中的新語法...