我有以下代码,大大减少了:
class Animal {
speak() {}
}
Animal.prototype.speaklouder = function() {};
for (const key in new Animal()) {
console.log("key", key);
}
这在节点6.11.0中产生
key speaklouder
为什么?我认为类语法只是糖?我希望函数说话也被列为属性。
答案 0 :(得分:1)
类属性不可枚举,请参阅ecma-262 6.0 14.5.14:
http://www.ecma-international.org/ecma-262/6.0/#sec-runtime-semantics-classdefinitionevaluation
PropertyDefinitionEvaluation
的第二个参数是enumerable
:
例如,您可以检查babel输出中的_createClass
函数:
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
// ...
descriptor.enumerable = descriptor.enumerable || false;
// ...
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);
// ...
return Constructor;
}
_createClass(Animal, [{
key: "speak",
value: function speak() {}
}]);
请参阅: