Typescript的private_protected_public访问修饰符是语法糖
class TestA {
private funcA() {
console.log('==========funcA')
}
protected funcB() {
console.log('=========funcB')
}
public funcC() {
console.log('==========funcC')
}
}
// ## typescript 的 private protected public 只是个语法糖,对属性和函数没有任何特征改变
const funcAKey = 'funcA'
const funcBKey = 'funcB'
const funcCKey = 'funcC'
const testA = new TestA()
const fA = testA[funcAKey]
const fB = testA[funcBKey]
const fC = testA[funcCKey]
// 这句话 ts 会标红线报错,但是根本不影响代码执行,代码执行实际上是允许的,就等同于下面的 fA()
testA.funcA()
testA.funcB()
testA.funcC()
console.log('-----------')
fA()
fB()
fC()
console.log('-----------')
console.log('testA[funcAKey] => ', fA)
console.log('testA[funcBKey] => ', fB)
console.log('testA[funcCKey] => ', fC)
console.log('-----------')
const testAproto = Object.getPrototypeOf(testA)
// 查看三个函数的属性描述
console.log('Descriptor(testA.funcA) => ', Object.getOwnPropertyDescriptor(testAproto, 'funcA'))
console.log('Descriptor(testA.funcB) => ', Object.getOwnPropertyDescriptor(testAproto, 'funcB'))
console.log('Descriptor(testA.funcC) => ', Object.getOwnPropertyDescriptor(testAproto, 'funcC'))
console.log('**********************************')
==========funcA
=========funcB
==========funcC
-----------
==========funcA
=========funcB
==========funcC
-----------
testA[funcAKey] => ƒ funcA() {
console.log("==========funcA");
}
testA[funcBKey] => ƒ funcB() {
console.log("=========funcB");
}
testA[funcCKey] => ƒ funcC() {
console.log("==========funcC");
}
-----------
Descriptor(testA.funcA) => {writable: true, enumerable: false, configurable: true, value: ƒ}
Descriptor(testA.funcB) => {writable: true, enumerable: false, configurable: true, value: ƒ}
Descriptor(testA.funcC) => {writable: true, enumerable: false, configurable: true, value: ƒ}
**********************************
网友评论