func (ctx ppctx) fields(obj *otto.Object) []string { var ( vals, methods []string seen = make(map[string]bool) ) add := func(k string) { if seen[k] || boringKeys[k] { return } seen[k] = true if v, _ := obj.Get(k); v.IsFunction() { methods = append(methods, k) } else { vals = append(vals, k) } } // add own properties ctx.doOwnProperties(obj.Value(), add) // add properties of the constructor if cp := constructorPrototype(obj); cp != nil { ctx.doOwnProperties(cp.Value(), add) } sort.Strings(vals) sort.Strings(methods) return append(vals, methods...) }