diff --git a/src/compile/dom/index.ts b/src/compile/dom/index.ts
index 3db1158449d7..f835272b3fc5 100644
--- a/src/compile/dom/index.ts
+++ b/src/compile/dom/index.ts
@@ -113,8 +113,6 @@ export default function dom(
? 'svelte/shared.js'
: options.shared || '';
- let prototypeBase = `${name}.prototype`;
-
const proto = sharedPath
? `@proto`
: deindent`
@@ -294,8 +292,9 @@ export default function dom(
`}
}
- customElements.define("${compiler.tag}", ${name});
- @assign(@assign(${prototypeBase}, ${proto}), {
+ @assign(${name}.prototype, ${proto});
+ ${templateProperties.methods && `@assign(${name}.prototype, %methods);`}
+ @assign(${name}.prototype, {
_mount(target, anchor) {
target.insertBefore(this, anchor);
},
@@ -304,6 +303,8 @@ export default function dom(
this.parentNode.removeChild(this);
}
});
+
+ customElements.define("${compiler.tag}", ${name});
`);
} else {
builder.addBlock(deindent`
@@ -311,8 +312,8 @@ export default function dom(
${constructorBody}
}
- @assign(${prototypeBase}, ${proto});
- ${templateProperties.methods && `@assign(${prototypeBase}, %methods);`}
+ @assign(${name}.prototype, ${proto});
+ ${templateProperties.methods && `@assign(${name}.prototype, %methods);`}
`);
}
diff --git a/test/custom-elements/samples/custom-method/main.html b/test/custom-elements/samples/custom-method/main.html
new file mode 100644
index 000000000000..b388472f2310
--- /dev/null
+++ b/test/custom-elements/samples/custom-method/main.html
@@ -0,0 +1,13 @@
+
{foo}
+
+
\ No newline at end of file
diff --git a/test/custom-elements/samples/custom-method/test.js b/test/custom-elements/samples/custom-method/test.js
new file mode 100644
index 000000000000..f6ef68c8c04e
--- /dev/null
+++ b/test/custom-elements/samples/custom-method/test.js
@@ -0,0 +1,12 @@
+import * as assert from 'assert';
+import './main.html';
+
+export default function (target) {
+ target.innerHTML = '';
+ const el = target.querySelector('custom-element');
+
+ el.updateFoo(42);
+
+ const p = el.shadowRoot.querySelector('p');
+ assert.equal(p.textContent, '42');
+}
\ No newline at end of file
diff --git a/test/js/samples/action/expected-bundle.js b/test/js/samples/action/expected-bundle.js
index f1ee2f4b20a0..1998828627d9 100644
--- a/test/js/samples/action/expected-bundle.js
+++ b/test/js/samples/action/expected-bundle.js
@@ -136,7 +136,7 @@ var proto = {
/* generated by Svelte vX.Y.Z */
function link(node) {
-
+
function onClick(event) {
event.preventDefault();
history.pushState(null, null, event.target.href);
diff --git a/test/js/samples/action/expected.js b/test/js/samples/action/expected.js
index 40459f03f9cc..50c235340a99 100644
--- a/test/js/samples/action/expected.js
+++ b/test/js/samples/action/expected.js
@@ -2,7 +2,7 @@
import { assign, createElement, detachNode, init, insertNode, noop, proto } from "svelte/shared.js";
function link(node) {
-
+
function onClick(event) {
event.preventDefault();
history.pushState(null, null, event.target.href);
diff --git a/test/js/samples/css-shadow-dom-keyframes/expected-bundle.js b/test/js/samples/css-shadow-dom-keyframes/expected-bundle.js
index 86200cb8c08b..6788ad53e3b2 100644
--- a/test/js/samples/css-shadow-dom-keyframes/expected-bundle.js
+++ b/test/js/samples/css-shadow-dom-keyframes/expected-bundle.js
@@ -185,8 +185,8 @@ class SvelteComponent extends HTMLElement {
}
}
-customElements.define("custom-element", SvelteComponent);
-assign(assign(SvelteComponent.prototype, proto), {
+assign(SvelteComponent.prototype, proto);
+assign(SvelteComponent.prototype, {
_mount(target, anchor) {
target.insertBefore(this, anchor);
},
@@ -196,4 +196,6 @@ assign(assign(SvelteComponent.prototype, proto), {
}
});
+customElements.define("custom-element", SvelteComponent);
+
export default SvelteComponent;
diff --git a/test/js/samples/css-shadow-dom-keyframes/expected.js b/test/js/samples/css-shadow-dom-keyframes/expected.js
index fa4eec75b0fa..81c7818b0c90 100644
--- a/test/js/samples/css-shadow-dom-keyframes/expected.js
+++ b/test/js/samples/css-shadow-dom-keyframes/expected.js
@@ -51,8 +51,8 @@ class SvelteComponent extends HTMLElement {
}
}
-customElements.define("custom-element", SvelteComponent);
-assign(assign(SvelteComponent.prototype, proto), {
+assign(SvelteComponent.prototype, proto);
+assign(SvelteComponent.prototype, {
_mount(target, anchor) {
target.insertBefore(this, anchor);
},
@@ -61,4 +61,6 @@ assign(assign(SvelteComponent.prototype, proto), {
this.parentNode.removeChild(this);
}
});
+
+customElements.define("custom-element", SvelteComponent);
export default SvelteComponent;
\ No newline at end of file