class定義私有屬性和私有方法
阿新 • • 發佈:2019-01-12
私有方法和私有屬性,是隻能在類的內部訪問的方法和屬性,外部不能訪問。
但 ES6 不提供,只能通過變通方法模擬實現
下面是私有方法和私有屬性暴露的例子
class Foo { //公有方法 foo (baz) { this._bar(baz); } //私有方法 _bar(baz) { return this.baz = baz; } } const instance = new Foo(); instance.foo(1); instance.baz; //1 instance._bar(2); //2 instance.baz; //2
解決方案一
將私有方法移出模組,因為模組內部的所有方法都是對外可見的
class Foo { // 公有方法 foo(baz) { _bar.call(this, baz); } } function _bar(baz) { return this.baz = baz; } const instance = new Foo(); instance.foo(1); instance; //{baz: 1} instance._bar(); //Uncaught TypeError: instance1.bar is not a function
解決方法二
利用Symbol值的唯一性,將私有方法的名字命名為一個Symbol值,導致第三方無法獲取到它們,因此達到了私有方法和私有屬性的效果。
const bar = Symbol('bar');
const baz = Symbol('baz');
export default class Foo {
//公有方法
foo (baz) {
this[bar](baz);
}
//私有方法
[bar](baz) {
return this[baz] = baz;
}
}