解析ES2015中的靜態方法

2021-09-26 07:27:03 字數 1104 閱讀 7068

es2015引入的靜態方法(static關鍵字),和我之前文章中解析的classconstructor一樣,都只是一種語法糖,本質上,與es5中的函式沒有什麼區別。

注意,es2015並沒有對靜態屬性的定義。

從es2015開始,我們可以使用static關鍵字定義乙個類的靜態方法:

class

foo}

foo.

init()

;var foo =

newfoo()

;console.

log(foo.version)

;// v1.0

foo.

init()

;// uncaught typeerror: foo.init is not a function

從上面的示例**中我們發現,es2015中的靜態方式只能被類名訪問,而無法被例項物件訪問。此外,我們還得知曉在上面靜態方法init中,this指向的是foo類本身,而this.prototype才是指向foo類的例項化物件。

ok!接下來,我們以es5環境下對es2015的靜態方法進行解析。

我們可以很容易地將上面的**轉換為以下es5的**:

var

foo=

function()

;foo.

init

=function

(options)

;foo.

init()

;var foo =

newfoo()

;console.

log(foo.version)

;// v1.0

foo.

init()

;// uncaught typeerror: foo.init is not a function

這兩者變化極小,所以就算不使用es2015的static關鍵字,我們也可以很輕鬆地定義靜態方法。

解析ES2015中的物件繼承

從es2015開始,我們可以使用extends關鍵字實現物件繼承,使用super關鍵字指向父物件。比如下面的es2015 class fooshow class barextends fooshow var bar newbar 1 jason bar.show 上面 的輸出結果為 子類 父類id ...

ES2015函式擴充套件 函式引數的預設值

在es6之前,不能直接為函式的引數指定預設值,只能採用變通的方法 function log x,y log hello hello world log hello china hello china log hello hello world這種寫法的缺點在於,如果引數y賦值了,但是對應的布林值為f...

ES2015函式擴充套件 函式引數的預設值

在es6之前,不能直接為函式的引數指定預設值,只能採用變通的方法 function log x,y log hello hello world log hello china hello china log hello hello world 這種寫法的缺點在於,如果引數y賦值了,但是對應的布林值為...