diff --git a/wasm/channels.go b/wasm/channels.go
index 0746c596cfdb7f8e275cb2a96ff3c7937cb73e28..a775928eb820439bdb1a4739d8011b1b952cf7de 100644
--- a/wasm/channels.go
+++ b/wasm/channels.go
@@ -265,8 +265,7 @@ func GetPublicChannelIdentityFromPrivate(_ js.Value, args []js.Value) any {
 //   - Throws a TypeError if creating the manager fails.
 func NewChannelsManager(_ js.Value, args []js.Value) any {
 	privateIdentity := utils.CopyBytesToGo(args[1])
-
-	em := &eventModelBuilder{args[2].Invoke}
+	em := newEventModelBuilder(args[2])
 
 	cm, err := bindings.NewChannelsManager(args[0].Int(), privateIdentity, em)
 	if err != nil {
@@ -298,7 +297,7 @@ func NewChannelsManager(_ js.Value, args []js.Value) any {
 //   - Javascript representation of the [ChannelsManager] object.
 //   - Throws a TypeError if loading the manager fails.
 func LoadChannelsManager(_ js.Value, args []js.Value) any {
-	em := &eventModelBuilder{args[2].Invoke}
+	em := newEventModelBuilder(args[2])
 	cm, err := bindings.LoadChannelsManager(args[0].Int(), args[1].String(), em)
 	if err != nil {
 		utils.Throw(utils.TypeError, err)
@@ -1753,6 +1752,12 @@ type eventModelBuilder struct {
 	build func(args ...any) js.Value
 }
 
+// newEventModelBuilder maps the methods on the Javascript object to a new
+// eventModelBuilder.
+func newEventModelBuilder(arg js.Value) *eventModelBuilder {
+	return &eventModelBuilder{build: arg.Invoke}
+}
+
 // Build initializes and returns the event model.  It wraps a Javascript object
 // that has all the methods in [bindings.EventModel] to make it adhere to the Go
 // interface [bindings.EventModel].
diff --git a/wasm/dm.go b/wasm/dm.go
index f5d438167ab164d1bc1e2f240ade61a4a785ed29..e3f71e289e9d7153123317fccc9b5b0240676fbd 100644
--- a/wasm/dm.go
+++ b/wasm/dm.go
@@ -85,8 +85,7 @@ func newDMClientJS(api *bindings.DMClient) map[string]any {
 //   - Throws a TypeError if creating the manager fails.
 func NewDMClient(_ js.Value, args []js.Value) any {
 	privateIdentity := utils.CopyBytesToGo(args[1])
-
-	em := &dmReceiverBuilder{args[2].Invoke}
+	em := newDMReceiverBuilder(args[2])
 
 	cm, err := bindings.NewDMClient(args[0].Int(), privateIdentity, em)
 	if err != nil {
@@ -570,6 +569,12 @@ type dmReceiverBuilder struct {
 	build func(args ...any) js.Value
 }
 
+// newDMReceiverBuilder maps the methods on the Javascript object to a new
+// dmReceiverBuilder.
+func newDMReceiverBuilder(arg js.Value) *dmReceiverBuilder {
+	return &dmReceiverBuilder{build: arg.Invoke}
+}
+
 // Build initializes and returns the event model. It wraps a Javascript object
 // that has all the methods in [bindings.EventModel] to make it adhere to the Go
 // interface [bindings.EventModel].