我觉得我记得在es-discuss上看到es6类方法不可写的东西,如
class Foo{
method(){}
}
Object.getOwnPropertyDescriptor(Foo.prototype, "method").writable -> false
我在Microsoft Edge和traceur中尝试了它们并且它们都是可写的,我不能在我的生活中找出如何在规范中找到它。
他们可写吗?或者类规范还没有完全被发现?
答案 0 :(得分:3)
是的,它们是可写的。
根据14.5.14 Runtime Semantics: ClassDefinitionEvaluation,
- 如果 ClassBody opt 不存在,请将方法设为新的空List。
- 否则,让方法为 ClassBody 的NonConstructorMethodDefinitions。
- 按方法的顺序为每个 ClassElement m
醇>
- 如果 m 的IsStatic是 false ,那么
- 让状态是使用参数 proto 和 false 执行 m 的PropertyDefinitionEvaluation的结果。
- 否则,
- 让状态是使用参数 F 和 false 执行 m 的PropertyDefinitionEvaluation的结果。
PropertyDefinitionEvaluation在14.3.9 Runtime Semantics: PropertyDefinitionEvaluation中定义:
MethodDefinition : PropertyName
(
StrictFormalParameters)
{
FunctionBody}
- 让 methodDef 成为 MethodDefinition 的DefineMethod,其参数为 object 。
- ReturnIfAbrupt( methodDef )。
- 执行SetFunctionName( methodDef 。[[closure]], methodDef 。[[key]])。
- 让 desc 成为Property Descriptor {[[Value]]: methodDef 。[[closure]],[[Writable]]: true ,[[Enumerable]]: enumerable , [[Configurable]]: true }。
- 返回DefinePropertyOrThrow(对象, methodDef 。[[key]], desc )。
醇>
总而言之,它们是可配置的,可写的和不可枚举的。