mirror of
https://github.com/robertkrimen/otto
synced 2025-10-05 19:19:10 +08:00
Merge pull request #134 from deoxxa/fix-getter-setter-clone
fix cloning getter/setter props
This commit is contained in:
commit
b5ae8b65d7
18
clone.go
18
clone.go
|
@ -141,14 +141,22 @@ func (clone *_clone) stash(in _stash) _stash {
|
|||
func (clone *_clone) property(in _property) _property {
|
||||
out := in
|
||||
|
||||
switch v := in.value.(type) {
|
||||
case _propertyGetSet:
|
||||
out.value = _propertyGetSet{v[0], v[1]}
|
||||
switch value := in.value.(type) {
|
||||
case Value:
|
||||
out.value = clone.value(v)
|
||||
out.value = clone.value(value)
|
||||
case _propertyGetSet:
|
||||
p := _propertyGetSet{}
|
||||
if value[0] != nil {
|
||||
p[0] = clone.object(value[0])
|
||||
}
|
||||
if value[1] != nil {
|
||||
p[1] = clone.object(value[1])
|
||||
}
|
||||
out.value = p
|
||||
default:
|
||||
panic(fmt.Errorf("in.value.(Value) != true"))
|
||||
panic(fmt.Errorf("in.value.(Value) != true; in.value is %T", in.value))
|
||||
}
|
||||
|
||||
return out
|
||||
}
|
||||
|
||||
|
|
18
clone_test.go
Normal file
18
clone_test.go
Normal file
|
@ -0,0 +1,18 @@
|
|||
package otto
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestCloneGetterSetter(t *testing.T) {
|
||||
vm := New()
|
||||
|
||||
vm.Run(`var x = Object.create(null, {
|
||||
x: {
|
||||
get: function() {},
|
||||
set: function() {},
|
||||
},
|
||||
})`)
|
||||
|
||||
vm.Copy()
|
||||
}
|
Loading…
Reference in New Issue
Block a user