diff --git a/src/core/util/options.js b/src/core/util/options.js index 0d4f4eeeabe..70e4d015b4d 100644 --- a/src/core/util/options.js +++ b/src/core/util/options.js @@ -96,7 +96,7 @@ export function mergeDataOrFn ( : childVal const defaultData = typeof parentVal === 'function' ? parentVal.call(vm) - : undefined + : parentVal if (instanceData) { return mergeData(instanceData, defaultData) } else { diff --git a/test/unit/features/options/inject.spec.js b/test/unit/features/options/inject.spec.js index e4d9f90e579..61111a7d431 100644 --- a/test/unit/features/options/inject.spec.js +++ b/test/unit/features/options/inject.spec.js @@ -545,4 +545,24 @@ describe('Options provide/inject', () => { expect(vm.$el.textContent).toBe(`foo: foo injected, bar: bar injected`) }) + + it('merge provide with object syntax when using Vue.extend', () => { + const child = { + inject: ['foo'], + template: ``, + created () { + injected = this.foo + } + } + const Ctor = Vue.extend({ + provide: { foo: 'foo' }, + render (h) { + return h(child) + } + }) + + new Ctor().$mount() + + expect(injected).toEqual('foo') + }) })