9.2 ECMAScript 函数对象

9.2.2 [[Construct]] ( argumentsList, newTarget )

[[Construct]]是ECMAScript 函数对象的内置方法,它可以以 argumentsList和newTarget为参数进行调用。argumentsList可能为一个空的List。其执行过程如下:

  • 断言F是个函数对象
  • 断言newTarget是个对象类型
  • callerContext为当前执行环境上下文
  • kind为F.[[ConstructorKind]]
  • 如果kind的值为'base',那么:
    • thisArgument 为 OrdinaryCreateFromConstructor(newTarget, "%ObjectPrototype%")的执行结果.
  • calleeContext 为 PrepareForOrdinaryCall(F, newTarget)的执行结果
  • 断言calleeContext 是当前执行上下文.
  • 如果kind是"base", 执行 OrdinaryCallBindThis(F, calleeContext, thisArgument).
  • 使 constructorEnv 为 calleeContext 的 LexicalEnvironment
  • 使 envRec 为 constructorEnv 的 EnvironmentRecord.
  • 使 result 为 OrdinaryCallEvaluateBody(F, argumentsList)的执行结果
  • 把 calleeContext 这个上下文从上下文堆栈中移除,从而使callerContext恢复为当前的执行上下文
  • 如果 result.[[Type]] 为 return, 那么
    • 如果 Type(result.[[Value]]) 是对象, 那么返回 NormalCompletion(result.[[Value]]).
    • 如果 kind 是 "base", 返回 NormalCompletion(thisArgument).
    • 如果 result.[[Value]] 不是 undefined, 抛出异常
  • 否则, ReturnIfAbrupt(result).
  • 返回 envRec.GetThisBinding().

results matching ""

    No results matching ""