Skip to content

ECMAScript规范解读this(未完待续)

ECMAScript 的类型分为语言类型和规范类型。

语言类型是开发者直接使用 ECMAScript 可以操作的。Undefined, Null, Boolean, String, Number, 和 Object。

规范类型相当于 meta-values,是用来用算法描述 ECMAScript 语言结构和 ECMAScript 语言类型的。Reference, List, Completion, Property Descriptor, Property Identifier, Lexical Environment, 和 Environment Record。

Reference

Reference 是一个 Specification Type,也就是 “只存在于规范里的抽象类型”。它们是为了更好地描述语言的底层行为逻辑才存在的,但并不存在于实际的 js 代码中。

Reference有三个组成部分:

  • base value:属性所在的对象,值只可能是 undefined, an Object, a Boolean, a String, a Number, or an environment record 其中的一种。
  • referenced name:属性名
  • strict reference

例子

js
var foo = 1

var fooReference = {
    base:envirronmentRecord,
    name:'foo',
    strict:false
}
var foo = 1

var fooReference = {
    base:envirronmentRecord,
    name:'foo',
    strict:false
}
js
var foo = {
    bar:function(){
        return this
    }
}
foo.bar()

var barReference = {
    base:foo,
    propertyName:'bar',
    strict:false
}
var foo = {
    bar:function(){
        return this
    }
}
foo.bar()

var barReference = {
    base:foo,
    propertyName:'bar',
    strict:false
}

获取 Reference 组成部分的方法

  1. GetBase():返回base value
  2. isPropertyReference(): base value为对象则返回true
  3. GetValue(reference):返回对象属性真正的值

...code,未完待续

更新于: