编辑代码

// 所需拷贝的对象含有内置类型并且不包含函数,使用MessageChannel

function structuralClone(obj) {
    return new Promise(resolve => {
        const { port1, port2 } = new MessageChannel()
        port2.onmessage = ev => resolve(ev.data)
        port1.postMessage(obj)
    })
}

var obj = {
    a: 1,
    b: {
        c: 2
    }
}

obj.b.d = obj.b
//console.log(obj)

const test = async () => {
    const clone = await structuralClone(obj)
    console.log('---')
    console.log(clone)
}

test()