es6 Class 的私有方法

2021-08-15 07:22:56 字數 1345 閱讀 3540

私有方法是常見需求,但 es6 不提供,只能通過變通方法模擬實現。

一種做法是在命名上加以區別。

class

widget

// 私有方法

_bar

(baz

)

// ...

}

上面**中,_bar方法前面的下劃線,表示這是乙個只限於內部使用的私有方法。但是,這種命名是不保險的,在類的外部,還是可以呼叫到這個方法。

另一種方法就是索性將私有方法移出模組,因為模組內部的所有方法都是對外可見的。

class

widget

// ...

}

function

bar(

baz)

上面**中,foo是公有方法,內部呼叫了bar.call(this, baz)。這使得bar實際上成為了當前模組的私有方法。

還有一種方法是利用symbol值的唯一性,將私有方法的名字命名為乙個symbol值。

const

bar

=symbol

('bar'

);

const

snaf

=symbol

('snaf'

);

export

default

class

myclass

// 私有方法

[bar

](baz

)

// ...

};

上面**中,barsnaf都是symbol值,導致第三方無法獲取到它們,因此達到了私有方法和私有屬性的效果。

es6 Class 的靜態方法

類相當於例項的原型,所有在類中定義的方法,都會被例項繼承。如果在乙個方法前,加上static關鍵字,就表示該方法不會被例項繼承,而是直接通過類來呼叫,這就稱為 靜態方法 class foo foo classmethod hello var foo new foo foo classmethod t...

ES6的私有方法

const sayhello symbol class student dosomething sayhello 如上sayhello可以作為乙個私有方法。但是嘗試了一下sayhello在例項化的那個頁面也可以訪問。雖然是作為symbol,但是給人感覺也比較奇怪,因為其他地方也可能會用到 sayhe...

ES6 Class語法介紹

參考文章 ecmascript 6 入門 概述 基本上,es6 的class可以看作只是乙個語法糖,它的絕大部分功 能,es5 都可以做到,新的class寫法只是讓物件原型的寫法更加清晰 更像物件導向程式設計的語法而已。舉個栗子 es5 function point x,y point.protot...