GetValue(v)

2018-06-16 15:05 更新
  1. 如果 Type(V) 不是引用 , 返回 V。
  2. 令 base 為調(diào)用 GetBase(V) 的返回值。
  3. 如果 IsUnresolvableReference(V), 拋出一個(gè) ReferenceError 異常。
  4. 如果 IsPropertyReference(V), 那么如果 HasPrimitiveBase(V) 是 false, 那么令 get 為 base 的 [[Get]] 內(nèi)部方法 , 否則令 get 為下面定義的特殊的 [[Get]] 內(nèi)部方法。將 base 作為 this 值,傳遞 GetReferencedName(V) 為參數(shù),調(diào)用 get 內(nèi)部方法,返回結(jié)果。
  5. 否則 , base 必須是一個(gè) environment record。
  6. 傳遞 GetReferencedName(V) 和 IsStrictReference(V) 為參數(shù)調(diào)用 base 的 GetBindingValue( 見 10.2.1) 具體方法,返回結(jié)果。

 GetValue 中的 V 是原始基值的 屬性引用 時(shí)使用下面的 [[Get]] 內(nèi)部方法。它用 base 作為他的 this 值,其中屬性 P 是它的參數(shù)。采用以下步驟:

  1. 令 O 為 ToObject(base)。
  2. 令 desc 為用屬性名 P 調(diào)用 O 的 [[GetProperty]] 內(nèi)部方法的返回值。
  3. 如果 desc 是 undefined,返回 undefined。
  4. 如果 IsDataDescriptor(desc) 是 true,返回 desc.[[Value]]。
  5. 否則 IsAccessorDescriptor(desc) 必須是 true,令 getter 為 desc.[[Get]]。
  6. 如果 getter 是 undefined,返回 undefined。
  7. 提供 base 作為 this 值,無參數(shù)形式調(diào)用 getter 的 [[Call]] 內(nèi)部方法,返回結(jié)果。

 上述方法之外無法訪問在第一步創(chuàng)建的對象。實(shí)現(xiàn)可以選擇不真的創(chuàng)建這個(gè)對象。使用這個(gè)內(nèi)部方法給實(shí)際屬性訪問產(chǎn)生可見影響的情況只有在調(diào)用訪問器函數(shù)時(shí)。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號