codecamp

GetValue(v)

  1. 如果 Type(V) 不是引用 , 返回 V。
  2. 令 base 为调用 GetBase(V) 的返回值。
  3. 如果 IsUnresolvableReference(V), 抛出一个 ReferenceError 异常。
  4. 如果 IsPropertyReference(V), 那么如果 HasPrimitiveBase(V) 是 false, 那么令 get 为 base 的 [[Get]] 内部方法 , 否则令 get 为下面定义的特殊的 [[Get]] 内部方法。将 base 作为 this 值,传递 GetReferencedName(V) 为参数,调用 get 内部方法,返回结果。
  5. 否则 , base 必须是一个 environment record。
  6. 传递 GetReferencedName(V) 和 IsStrictReference(V) 为参数调用 base 的 GetBindingValue( 见 10.2.1) 具体方法,返回结果。

 GetValue 中的 V 是原始基值的 属性引用 时使用下面的 [[Get]] 内部方法。它用 base 作为他的 this 值,其中属性 P 是它的参数。采用以下步骤:

  1. 令 O 为 ToObject(base)。
  2. 令 desc 为用属性名 P 调用 O 的 [[GetProperty]] 内部方法的返回值。
  3. 如果 desc 是 undefined,返回 undefined。
  4. 如果 IsDataDescriptor(desc) 是 true,返回 desc.[[Value]]。
  5. 否则 IsAccessorDescriptor(desc) 必须是 true,令 getter 为 desc.[[Get]]。
  6. 如果 getter 是 undefined,返回 undefined。
  7. 提供 base 作为 this 值,无参数形式调用 getter 的 [[Call]] 内部方法,返回结果。

 上述方法之外无法访问在第一步创建的对象。实现可以选择不真的创建这个对象。使用这个内部方法给实际属性访问产生可见影响的情况只有在调用访问器函数时。


Object 内部属性及方法
PutValue(v,w)
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }