- 可以利用模块隐藏部分实现
const _radius = new WeakMap()
class Circle {
constructor(radius) {
_radius.set(this, radius)
}
draw() {
console.log(`Circle with radius ${_radius.get(this)}`)
}
}
const c = new Circle(10)
console.log(_radius.get(c))// 暴露了
c.draw()
- CommonJS
// index.js
const { Circle } = require('./circle')
const c = new Circle(10)
c.draw()
// circle.js
const _radius = new WeakMap()
class Circle {
constructor(radius) {
_radius.set(this, radius)
}
draw() {
console.log(`Circle with radius ${_radius.get(this)}`)
}
}
module.exports.Circle = Circle
- ES6 Module
// index.js
import { Circle } from './circle.js'
const c = new Circle(10)
c.draw()
// circle.js
const _radius = new WeakMap()
export class Circle {
constructor(radius) {
_radius.set(this, radius)
}
draw() {
console.log(`Circle with radius ${_radius.get(this)}`)
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script type="module" src="index.js"></script>
</head>
<body>
</body>
</html>