亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 403 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號