首頁(yè)技術(shù)文章正文

對(duì)象中有多個(gè)模塊,怎樣防止某一個(gè)鍵被意外改寫、覆蓋?

更新時(shí)間:2023-08-18 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

因?yàn)槊恳粋€(gè)Symbol的值都是不相等的,所以將Symbol作為對(duì)象的屬性名可以保證屬性不重名。這適用于對(duì)象由多個(gè)模塊組成的情況,可以防止某一個(gè)鍵被意外改寫或覆蓋,示例代碼如下。

<script>
  let MY NAME = Symbol ();
  //第1種寫法
  let a = {}
  a[MY_NAME] = 'Hello!';
  console.log(a);// 輸出結(jié)果:{ Symbol():“Hello!"}
  //第2種寫法
  let a = {
     [MY_NAME]: 'Hello!',
  };
  console.log(a);//輸出結(jié)果:{Symbol():“Hello!”}
  //第3種寫法
  let a = ();
  Object.defineProperty(a, MY_NAME, ( value: 'Hello!'));
  console.log(a);//輸出結(jié)果:(Symbol():“Hello!“)
</script>

上述代碼通過(guò)方括號(hào)結(jié)構(gòu)或Object.defineProperty 將對(duì)象的屬性名指定為一個(gè)Symbol 值。使用第1種寫法時(shí),將Symbal值作為對(duì)象屬性名要使用方括號(hào)而不能用點(diǎn)運(yùn)算符。這是因?yàn)辄c(diǎn)運(yùn)算符后面一直是字符串,導(dǎo)致a的屬性名實(shí)際上是一個(gè)字符串,而不是一個(gè)Symbol值。使用第2種寫法時(shí),若想在對(duì)象內(nèi)部使用Symbal值定義屬性,Symbol 值必須放在方括號(hào)中,如果MY_NAME不放在方括中,該屬性的鍵名就是字符串MY_NAME,而不是MY_NAME所代表的那個(gè)Symbal值。使用第3種寫法時(shí),會(huì)直接在一個(gè)a對(duì)象上定義一個(gè)新屬性,并返回此對(duì)象。以上3種方式的輸出結(jié)果相同。


分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!