为了账号安全,请及时绑定邮箱和手机立即绑定

js 引用类型

js 引用类型

富国沪深 2018-12-07 13:36:39
//==================== var a=function(){} a.add=function a(){ return 1; } var b=a; a.add=function b(){ return 2; } b.add();//log: 2 //==================== var c=function(){ return 1; } var d=c; c=function(){ return 2; } d(); // log:1 都是引用类型,这两段代码有啥区别吗,请教
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

            //函数表达式,空构造函数
            var a = function () { }
            alert(typeof a) //function
            a.add = function a() {
                alert("1");
            }
            a.add();//1
            var b = a; //函数表达式,b引用a,b的protptype指向var a = function(){}
            alert(typeof b); //function
   //新的a.add = function b(){}会把原来var a = function(){}中的方法给重写了。
a.add = function b() { alert("2"); } window.onload = function () { b.add(); //2 }

查看完整回答
反对 回复 2018-12-24
?
慕仙森

TA贡献1827条经验 获得超8个赞

第一段:a存放的是指向对象数据的地址 是个address 然后赋予b, b和a存放的是一样的一个地址。

a.add=function b(){     return 1;} 这句话的意思是通过a存放的地址找到数据对象 然后在数据对象里存放一个add方法,
a.add=function b(){     return 2;} 这句话的意思是通过a存放的地址找到数据对象 然后在数据对象里修改add方法,
既然b和a存放的是同个地址 地址指向的数据对象已经被修改 那么b.add() 就是2了。
第二段:c存放的是指向对象数据的地址, d和c存放的是一样的一个地址。
不同的是,c=function(){ return 2;} 里面function(){ return 2;}是一个新的对象数据,那么在堆上就会有新的内存空间来放,会产生新的地址赋予c,既然c和d本来的关系是 存放这一样的地址 现在c改变了地址,跟d又没关系 所以d()还是指向原来的地址就是还是1
 我这是透过现象看本质。。。 哈哈  你参考参考就行了 我也不确定到底是不是完全准确 
查看完整回答
反对 回复 2018-12-24
  • 2 回答
  • 0 关注
  • 388 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信