diff --git a/src/runtime/internal/Component.ts b/src/runtime/internal/Component.ts
index 10588a08046b..3c8bf9d0f2cd 100644
--- a/src/runtime/internal/Component.ts
+++ b/src/runtime/internal/Component.ts
@@ -127,7 +127,7 @@ export function init(component, options, instance, create_fragment, not_equal, p
let ready = false;
$$.ctx = instance
- ? instance(component, prop_values, (i, ret, ...rest) => {
+ ? instance.call(component, component, prop_values, (i, ret, ...rest) => {
const value = rest.length ? rest[0] : ret;
if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {
if ($$.bound[i]) $$.bound[i](value);
diff --git a/test/custom-elements/samples/instance-this/main.svelte b/test/custom-elements/samples/instance-this/main.svelte
new file mode 100644
index 000000000000..47ff31e4922a
--- /dev/null
+++ b/test/custom-elements/samples/instance-this/main.svelte
@@ -0,0 +1,7 @@
+
+
+
diff --git a/test/custom-elements/samples/instance-this/test.js b/test/custom-elements/samples/instance-this/test.js
new file mode 100644
index 000000000000..8520710ca059
--- /dev/null
+++ b/test/custom-elements/samples/instance-this/test.js
@@ -0,0 +1,8 @@
+import * as assert from 'assert';
+import './main.svelte';
+
+export default function (target) {
+ target.innerHTML = '';
+ const el = target.querySelector('my-app');
+ assert.ok(el.self === el);
+}
\ No newline at end of file