私有方法是常見需求,但 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
)
// ...
};
bar
和snaf
都是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...