- 如果 Type(V) 不是引用 , 返回 V。
- 令 base 為調(diào)用 GetBase(V) 的返回值。
- 如果 IsUnresolvableReference(V), 拋出一個 ReferenceError 異常。
- 如果 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é)果。
- 否則 , base 必須是一個 environment record。
- 傳遞 GetReferencedName(V) 和 IsStrictReference(V) 為參數(shù)調(diào)用 base 的 GetBindingValue( 見 10.2.1) 具體方法,返回結(jié)果。
GetValue 中的 V 是原始基值的 屬性引用 時使用下面的 [[Get]] 內(nèi)部方法。它用 base 作為他的 this 值,其中屬性 P 是它的參數(shù)。采用以下步驟:
- 令 O 為 ToObject(base)。
- 令 desc 為用屬性名 P 調(diào)用 O 的 [[GetProperty]] 內(nèi)部方法的返回值。
- 如果 desc 是 undefined,返回 undefined。
- 如果 IsDataDescriptor(desc) 是 true,返回 desc.[[Value]]。
- 否則 IsAccessorDescriptor(desc) 必須是 true,令 getter 為 desc.[[Get]]。
- 如果 getter 是 undefined,返回 undefined。
- 提供 base 作為 this 值,無參數(shù)形式調(diào)用 getter 的 [[Call]] 內(nèi)部方法,返回結(jié)果。
上述方法之外無法訪問在第一步創(chuàng)建的對象。實現(xiàn)可以選擇不真的創(chuàng)建這個對象。使用這個內(nèi)部方法給實際屬性訪問產(chǎn)生可見影響的情況只有在調(diào)用訪問器函數(shù)時。
更多建議: