ES6类方法是否可写?

时间:2015-06-27 22:57:20

标签: javascript ecmascript-6

我觉得我记得在es-discuss上看到es6类方法不可写的东西,如

class Foo{
    method(){}
}
Object.getOwnPropertyDescriptor(Foo.prototype, "method").writable -> false

我在Microsoft Edge和traceur中尝试了它们并且它们都是可写的,我不能在我的生活中找出如何在规范中找到它。

他们可写吗?或者类规范还没有完全被发现?

1 个答案:

答案 0 :(得分:3)

是的,它们是可写的。

根据14.5.14 Runtime Semantics: ClassDefinitionEvaluation

  
      
  1. 如果 ClassBody opt 不存在,请将方法设为新的空List
  2.   
  3. 否则,让方法 ClassBody 的NonConstructorMethodDefinitions。
  4.   
  5. 方法的顺序为每个 ClassElement m      
        
    1. 如果 m 的IsStatic是 false ,那么      
          
      1. 状态是使用参数 proto false 执行 m 的PropertyDefinitionEvaluation的结果。
      2.   
    2.   
    3. 否则,      
          
      1. 状态是使用参数 F false 执行 m 的PropertyDefinitionEvaluation的结果。
      2.   
    4.   
  6.   

PropertyDefinitionEvaluation在14.3.9 Runtime Semantics: PropertyDefinitionEvaluation中定义:

  

MethodDefinition PropertyName ( StrictFormalParameters ) {    FunctionBody }

     
      
  1. methodDef 成为 MethodDefinition 的DefineMethod,其参数为 object
  2.   
  3. ReturnIfAbrupt methodDef )。
  4.   
  5. 执行SetFunctionName methodDef 。[[closure]], methodDef 。[[key]])。
  6.   
  7. desc 成为Property Descriptor {[[Value]]: methodDef 。[[closure]],[[Writable]]: true ,[[Enumerable]]: enumerable ,   [[Configurable]]: true }。
  8.   
  9. 返回DefinePropertyOrThrow对象 methodDef 。[[key]], desc )。
  10.   

总而言之,它们是可配置的,可写的和不可枚举的。