第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在外部變量更改時(shí)更新對(duì)象屬性

如何在外部變量更改時(shí)更新對(duì)象屬性

我再次偶然發(fā)現(xiàn)了我不理解的 Javascript 行為。一旦對(duì)象外部的變量發(fā)生更改,我就需要更新對(duì)象的屬性。外部變量在對(duì)象屬性中被引用,所以我認(rèn)為我所要做的就是從外部更改變量并自動(dòng)更改屬性值。這是代碼外觀的簡(jiǎn)化版本:var serverPath = "123/";var GetCurrentProductionApiConfig = {  URL: {    GetStart: serverPath + 'GetCurrentProduction?returnValue=start&',    GetEnd: serverPath + 'GetCurrentProduction?returnValue=end&',    Get: serverPath + 'GetCurrentProduction?returnValue=start&'  }};serverPath = "456/";console.log(GetCurrentProductionApiConfig.URL.GetStart);這將導(dǎo)致:123/GetCurrentProduction?returnValue=start&是因?yàn)樽兞恳驯粡?fù)制(通過(guò)值傳遞)而不是在其上有一個(gè)指針(通過(guò)引用傳遞)?哪種方式是更新屬性的正確方式?
查看完整描述

1 回答

?
至尊寶的傳說(shuō)

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊

JavaScript 中的所有內(nèi)容都是按值傳遞的,但碰巧對(duì)象的值是它的引用。然而,這里重要的是對(duì)于原語(yǔ),當(dāng)引用的變量發(fā)生變化時(shí)不會(huì)發(fā)生變化:


var a = "world";

var obj = {

  b: "hello" + a //evaluated once

}


a = "universe"; //does not modify obj.b which references a


console.log(obj.b); //helloworld

為了獲得動(dòng)態(tài)計(jì)算的字符串,您需要調(diào)用一個(gè)函數(shù)或方法:


var a = "world";

var obj = {

  b: function() { 

    return "hello" + a //evaluated every time the function is executed

  }

}

console.log(obj.b()); //helloworld


a = "universe"; //will influence obj.b


console.log(obj.b()); //hellouniverse

然而,這看起來(lái)有點(diǎn)“臟”,因?yàn)樗仁拐{(diào)用者知道每次都評(píng)估屬性。如果某些屬性是純字符串,而其他屬性是函數(shù),則它還會(huì)引入不一致,如果屬性必須從一個(gè)更改為另一個(gè),則尤其煩人 - 您需要修改調(diào)用此代碼的每個(gè)位置以更改,例如更改obj.c為obj.c().


相反,使用 ES6+,您可以為屬性定義一個(gè) getter,該屬性將執(zhí)行與以前相同的操作,但會(huì)隱藏函數(shù)調(diào)用,因此無(wú)論何時(shí)您讀取一個(gè)屬性,您實(shí)際上都會(huì)評(píng)估代碼以返回結(jié)果:


var a = "world";

var obj = {

  c: "plain property"

}


Object.defineProperty(obj, 'b', {

  get: function() {

    return "hello" + a //evaluated every time the property is read

  }

});


console.log(obj.b); //helloworld


a = "universe"; //will influence obj.b


console.log(obj.b); //hellouniverse

console.log(obj.c); //plain property


查看完整回答
反對(duì) 回復(fù) 2021-10-21
  • 1 回答
  • 0 關(guān)注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)