syscall/js: remove Wrapper interface

This change removes the js.Wrapper interface for performance reasons.
See proposal #44006 for details.

This is a breaking change, but syscall/js is exempt from Go's
compatibility promise.

Fixes #44006

Change-Id: I968cd14b1e61cc72ea9f84240b6bd29e8b8ae673
Reviewed-on: https://go-review.googlesource.com/c/go/+/356430
Trust: Richard Musiol <neelance@gmail.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Emmanuel Odeke <emmanuel@orijtech.com>
diff --git a/src/syscall/js/func.go b/src/syscall/js/func.go
index ab23e5f..dde1e68 100644
--- a/src/syscall/js/func.go
+++ b/src/syscall/js/func.go
@@ -15,8 +15,6 @@
 	nextFuncID uint32 = 1
 )
 
-var _ Wrapper = Func{} // Func must implement Wrapper
-
 // Func is a wrapped Go function to be called by JavaScript.
 type Func struct {
 	Value // the JavaScript function that invokes the Go function
diff --git a/src/syscall/js/js.go b/src/syscall/js/js.go
index d805d69..0da0ddf 100644
--- a/src/syscall/js/js.go
+++ b/src/syscall/js/js.go
@@ -28,12 +28,6 @@
 // nanHead are the upper 32 bits of a ref which are set if the value is not encoded as an IEEE 754 number (see above).
 const nanHead = 0x7FF80000
 
-// Wrapper is implemented by types that are backed by a JavaScript value.
-type Wrapper interface {
-	// JSValue returns a JavaScript value associated with an object.
-	JSValue() Value
-}
-
 // Value represents a JavaScript value. The zero value is the JavaScript value "undefined".
 // Values can be checked for equality with the Equal method.
 type Value struct {
@@ -51,11 +45,6 @@
 	typeFlagFunction
 )
 
-// JSValue implements Wrapper interface.
-func (v Value) JSValue() Value {
-	return v
-}
-
 func makeValue(r ref) Value {
 	var gcPtr *ref
 	typeFlag := (r >> 32) & 7
@@ -162,10 +151,10 @@
 // Panics if x is not one of the expected types.
 func ValueOf(x interface{}) Value {
 	switch x := x.(type) {
-	case Value: // should precede Wrapper to avoid a loop
+	case Value:
 		return x
-	case Wrapper:
-		return x.JSValue()
+	case Func:
+		return x.Value
 	case nil:
 		return valueNull
 	case bool: