Skip to content

Commit 5f716b4

Browse files
committed
remove support for initialization class fields with this.xxx in class declaration
1 parent b237a34 commit 5f716b4

File tree

4 files changed

+22
-37
lines changed

4 files changed

+22
-37
lines changed

src/class.ts

+1-16
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,9 @@
11
import type { ComponentPublicInstance } from 'vue'
2-
import type { OptionBuilder } from './optionBuilder'
32
import type { IdentityType, Identity, IdentitySymbol } from './identity'
43
export type VueCons<RawInstance extends Identity = Identity, IT extends IdentityType = { props: {}, events: {} }, Bundle = IT['props'] & { [index in keyof IT['events']as `on${Capitalize<index & string>}`]?: IT['events'][index] extends Function ? IT['events'][index] : { (param: IT['events'][index]): any } }> = {
5-
new(optionBuilder: OptionBuilder, vueInstance: any): ComponentPublicInstance<Bundle> & Identity<IT> & Omit<RawInstance, typeof IdentitySymbol>
4+
new(): ComponentPublicInstance<Bundle> & Identity<IT> & Omit<RawInstance, typeof IdentitySymbol>
65
}
76

87
export const Base = class {
9-
constructor(optionBuilder: OptionBuilder, vueInstance: any) {
10-
const props = optionBuilder.props
11-
if (props) {
12-
Object.keys(props).forEach(key => {
13-
(this as any)[key] = vueInstance[key];
14-
})
15-
}
16-
const methods = optionBuilder.methods
17-
if (methods) {
18-
Object.keys(methods).forEach(key => {
19-
(this as any)[key] = methods[key].bind(vueInstance)
20-
})
21-
}
22-
}
238

249
} as VueCons

src/component.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ function componentOptionFactory(cons: VueCons, extend?: any) {
3636
setup: optionBuilder.setup,
3737
data() {
3838
delete optionBuilder.data
39-
optionData(cons, optionBuilder, this)
39+
optionData(cons, optionBuilder)
4040
return optionBuilder.data ?? {}
4141
},
4242
methods: optionBuilder.methods,

src/option/data.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import type { VueCons } from '../class'
22
import type { OptionBuilder } from '../optionBuilder'
33
import { filterNames, getValidOwnPropertyNames } from '../utils'
44
import { obtainSlot } from '../slot'
5-
export function build(cons: VueCons, optionBuilder: OptionBuilder, vueInstance: any) {
5+
export function build(cons: VueCons, optionBuilder: OptionBuilder) {
66
optionBuilder.data ??= {}
7-
const sample = new cons(optionBuilder, vueInstance)
7+
const sample = new cons()
88
let names = getValidOwnPropertyNames(sample, (des, name) => {
99
return !!des.enumerable
1010
&& !optionBuilder.methods?.[name]

test/option/data.ts

+18-18
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ class Comp extends Base {
1212
@Prop
1313
prop!: string
1414

15-
fieldInitProp = this.prop //not work
15+
// fieldInitProp = this.prop //not work
1616

17-
methods = [this.method];
17+
// methods = [this.method];
1818

19-
options = {
20-
handler: this.method,
21-
}
22-
wrapped = () => this.method();
19+
// options = {
20+
// handler: this.method,
21+
// }
22+
// wrapped = () => this.method();
2323

2424
method() {
2525
return this.prop
@@ -39,22 +39,22 @@ describe('option data',
3939

4040
expect('function').to.equal(typeof CompContext?.data)
4141
expect('data value').to.equal(vm.data)
42-
expect(5).to.equal(Object.keys(CompContext.data()).length)
42+
expect(1).to.equal(Object.keys(CompContext.data()).length)
4343
})
4444

45-
it('binds methods to the component context', () => {
46-
const { vm } = mount(CompContext, {
47-
props: {
48-
prop: 'prop test'
49-
}
50-
})
51-
expect('prop test').to.equal(vm.methods[0]())
52-
expect('prop test').to.equal(vm.options.handler())
53-
expect('prop test').to.equal(vm.wrapped())
54-
// expect('prop test').to.equal(vm.fieldInitProp)
45+
// it('binds methods to the component context', () => {
46+
// const { vm } = mount(CompContext, {
47+
// props: {
48+
// prop: 'prop test'
49+
// }
50+
// })
51+
// expect('prop test').to.equal(vm.methods[0]())
52+
// expect('prop test').to.equal(vm.options.handler())
53+
// expect('prop test').to.equal(vm.wrapped())
54+
// // expect('prop test').to.equal(vm.fieldInitProp)
5555

5656

57-
})
57+
// })
5858
}
5959
)
6060
export default {}

0 commit comments

Comments
 (0)