diff --git a/src/compile/render-dom/index.ts b/src/compile/render-dom/index.ts
index 067288c0f5..663006d508 100644
--- a/src/compile/render-dom/index.ts
+++ b/src/compile/render-dom/index.ts
@@ -165,9 +165,14 @@ export default function dom(
}
if (node.type === 'AssignmentExpression') {
- const names = node.left.type === 'MemberExpression'
- ? [getObject(node.left).name]
- : extractNames(node.left);
+ let names = [];
+
+ if (node.left.type === 'MemberExpression') {
+ const left_object_name = getObject(node.left).name;
+ left_object_name && (names = [left_object_name]);
+ } else {
+ names = extractNames(node.left);
+ }
if (node.operator === '=' && nodes_match(node.left, node.right)) {
const dirty = names.filter(name => {
diff --git a/test/js/samples/dont-invalidate-this/expected.js b/test/js/samples/dont-invalidate-this/expected.js
new file mode 100644
index 0000000000..db21ccdd64
--- /dev/null
+++ b/test/js/samples/dont-invalidate-this/expected.js
@@ -0,0 +1,42 @@
+/* generated by Svelte vX.Y.Z */
+import { SvelteComponent as SvelteComponent_1, addListener, createElement, detachNode, init, insert, noop, safe_not_equal } from "svelte/internal";
+
+function create_fragment(ctx) {
+ var input, dispose;
+
+ return {
+ c() {
+ input = createElement("input");
+ dispose = addListener(input, "input", make_uppercase);
+ },
+
+ m(target, anchor) {
+ insert(target, input, anchor);
+ },
+
+ p: noop,
+ i: noop,
+ o: noop,
+
+ d(detach) {
+ if (detach) {
+ detachNode(input);
+ }
+
+ dispose();
+ }
+ };
+}
+
+function make_uppercase() {
+ this.value = this.value.toUpperCase();
+}
+
+class SvelteComponent extends SvelteComponent_1 {
+ constructor(options) {
+ super();
+ init(this, options, null, create_fragment, safe_not_equal);
+ }
+}
+
+export default SvelteComponent;
diff --git a/test/js/samples/dont-invalidate-this/input.svelte b/test/js/samples/dont-invalidate-this/input.svelte
new file mode 100644
index 0000000000..5b0a565a3a
--- /dev/null
+++ b/test/js/samples/dont-invalidate-this/input.svelte
@@ -0,0 +1,6 @@
+
+