如何理解JavaScript中类实例提供的forEach行为?

如何理解JavaScript中类实例提供的forEach行为?,javascript,Javascript,我不能真正理解console.log最后的输出 它打印: 1为什么speak-未定义? 2为什么有第三个输出行-刚刚-未定义?它是从哪里来的 类条{ 说{ 让text='test'; 警报文本; 返回文本; } } var测试=新棒; z=Object.getOwnPropertyNamesObject.getPrototypeOftest; console.logtypeof z,-,z; console.logz.forEachfunctione{console.loge,-,z[e];

我不能真正理解console.log最后的输出

它打印:

1为什么speak-未定义? 2为什么有第三个输出行-刚刚-未定义?它是从哪里来的

类条{ 说{ 让text='test'; 警报文本; 返回文本; } } var测试=新棒; z=Object.getOwnPropertyNamesObject.getPrototypeOftest; console.logtypeof z,-,z; console.logz.forEachfunctione{console.loge,-,z[e];} 您正在检查z[e],而不是测试[e]。z是一个属性名称数组,数组没有speak属性,这与Bar对象有speak属性不同

这就解释了speak-undefined行。最后一个未定义的独立变量是console.log本身的返回值:

z.forEachfunctione{console.loge,-,z[e];}不返回任何值,因此您得到未定义的值
constructor  -  ƒ Array() { [native code] }
speak  -  undefined
undefined