javascript - 关于js里面的传引用问题?

查看:86
本文介绍了javascript - 关于js里面的传引用问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

比如有两个变量,两个都是数字,var a=1;然后把a的值赋给b,var b=a;
怎么做到当a变化的时候,b也随着变化?

解决方案

这的确是一个有趣的问题. 闲来无事, 我就去实验了一下.
首先, 因为要达到楼主说的方法, 那么就要想法设法把a, b弄成引用类型. 如果用一楼的方法的话, 那就离题啦. 那当然不是我想要的.
于是我先尝试了这个:

        var a = new Number(1),
            b = a;
        alert(a === b);//true
        a = 2;
        alert(b);//1

失败了! 虽然b的确是引用了a引用的对象, 二者也的确指向了同一个对象. 但是,当对a赋值时, a就自动被转换成了number类型. 不再是一个对象, 那就更谈不上更改b所指对象的值啦.

        alert(typeof a);//number
        alert(typeof b);//object
        a.name = "tiny";
        b.name = "tiny";
        alert(a.name);//undefined
        alert(b.name);//tiny

那么我们必须要想一个办法, 修改表示Number对象的数值的那一个属性的值, 如果这个属性[writable]为true,那么我们就可以通过直接改变这个属性的值, 来改变对象的值. 如果是false, 那么我们还可以试试用Object.defineProperty()方法(如果[configurable]不为false的话). 但是坑爹的就是, 这个方法也需要传入这个属性名做参数.
现在问题已经出来了, 只要我们能找到这个属性的名字, 到底是Number对象的哪一个属性, 表示了Number对象的数值. 且这个属性至少[configurable]不为false, 那么我们就可以达到楼主的目的. 但是很遗憾, 我翻遍了MDN关于Number对象属性的文档,还是没能找出这个属性到底是谁. 所以这个问题到底有没有答案呢? 或许只有真正的大神才知道. 至少我是不知道.

这篇关于javascript - 关于js里面的传引用问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆