JS模拟面向对象全解(二、类型与赋值)

上次,我讲了有关类型区别和传递的问题,现在,我给大家在插上一点有关类型赋值的问题。

类型赋值类似变量传递的问题。

基本数据类型不必说,传值的。

由此观之,发现改变b不会改变a,因为都是变量的值在来回传递,和变量本身没有关系。

——

对象类型,传址的。

这样,由于传址,所以b即是a,a即是b,互相改变。

如若还不清楚,再举个例子:

——

不过,对象类型的属性互相赋值,就与对象类型没关系了,就和其属性的类型有关系。

属性是基本数据类型则传值,属性是对象类型则传址。举个例子吧,简单点:


上面来回赋值的不过是两个不同对象的属性,都是互相孤立的,也都是基本数据类型,因此只是互相传值,不会互相影响。


这也是一样,b这个基本数据类型与a的基本数据类型的属性x相互赋值,同样不会互相影响,只是互相传值。

——

可是,对象的属性如果也是对象类型,那就也是传址了。


a对象的属性x,被定义为一个Object对象类型。因此b赋值为a.x时,他们就是互通的了,其实就是同一个了,可以互相影响、改变。

————

可是,如果我想让对象类型变量赋值时,只是拷贝属性,而不是达到“你就是我,我就是你”的境界、“同生共死”的高尚品格。怎么办?

木有什么特别好的办法,用下面这个函数吧。

用法,

看,修改了b.x却不能影响a.x了吧?

这个DeepCopy是个不错的函数。

——

上面实现了对象类型的模拟“传值”

那么怎么做才能模拟基本数据类型的“传址”?

就是用Array对象。


赋值为一个[xx],其实就是赋值为一个有数据的Array对象。这里就是利用含有一个元素的数组来模拟传址。因为数组是对象类型,传递时传址。

当然,你也可以用任意对象类型的属性来模拟。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值