考虑以下代码:
function objectFunction() {
this.x = 2;
}
console.log(Object.keys(objectFunction));
console.log(objectFunction.__proto__, objectFunction.prototype);
为什么我会得到一个访问
__proto__
上的 objectFunction
属性的函数,因为我在使用 Object.keys(objectFunction)
获得的数组中找不到此属性?当我尝试运行上面的代码时,我得到以下结果:
我们在 objectFunction 上没有键,但我能够访问
__proto__
,但事实不应该是这样。它应该返回未定义。
我从 here 知道 __proto__
仅在实例上可用,而 prototype
在函数或对象上可用。
__proto__
是 Object.prototype
上的不可枚举 getter,存在于 objectFunction
的原型链中 (objectFunction
->Function.prototype
->Object.prototype
)
所以你得到了
Function.prototype