diff --git a/packages/runtime-core/__tests__/componentProxy.spec.ts b/packages/runtime-core/__tests__/componentProxy.spec.ts index d5d46c25..706fad4a 100644 --- a/packages/runtime-core/__tests__/componentProxy.spec.ts +++ b/packages/runtime-core/__tests__/componentProxy.spec.ts @@ -117,6 +117,11 @@ describe('component: proxy', () => { instanceProxy.foo = 1 expect(instanceProxy.foo).toBe(1) expect(instance!.ctx.foo).toBe(1) + + // should also allow properties that start with $ + const obj = (instanceProxy.$store = {}) + expect(instanceProxy.$store).toBe(obj) + expect(instance!.ctx.$store).toBe(obj) }) test('globalProperties', () => { diff --git a/packages/runtime-core/src/componentProxy.ts b/packages/runtime-core/src/componentProxy.ts index 183207e9..bee09ee8 100644 --- a/packages/runtime-core/src/componentProxy.ts +++ b/packages/runtime-core/src/componentProxy.ts @@ -184,6 +184,10 @@ export const PublicInstanceProxyHandlers: ProxyHandler = { (cssModule = cssModule[key]) ) { return cssModule + } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { + // user may set custom properties to `this` that start with `$` + accessCache![key] = AccessTypes.CONTEXT + return ctx[key] } else if ( // global properties ((globalProperties = appContext.config.globalProperties),