go 的实现
package main
import "fmt"
type M struct {
Num int64
}
func T1() {
fmt.Printf("----T1----\n")
a := M{1}
b := a
fmt.Printf("%+v\n", a)
fmt.Printf("%+v\n", b)
a.Num = 2
fmt.Printf("%+v\n", a)
fmt.Printf("%+v\n", b)
}
func T2() {
fmt.Printf("----T2----\n")
a := &M{1}
b := a
fmt.Printf("%+v\n", a)
fmt.Printf("%+v\n", b)
a.Num = 2
fmt.Printf("%+v\n", a)
fmt.Printf("%+v\n", b)
}
func main() {
T1()
T2()
}
输出结果
----T1----
{Num:1}
{Num:1}
{Num:2}
{Num:1}
----T2----
&{Num:1}
&{Num:1}
&{Num:2}
&{Num:2}
js 的实现
function T2(){
let a = {num: 1}
let b = a
console.log(a)
console.log(b)
a.num = 2
console.log(a)
console.log(b)
}
输出结果
{num: 1}
{num: 1}
{num: 2}
{num: 2}
如何使用 js 实现 golang 的 T1 方法?除了深拷贝。
就类似于“从源 Object 创建一个新的 Object ,内存地址完全是新的,新 Object 也和源完全一样,不会丢失各种属性”,js 自带的好像没看到类似的方法
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.