如果您尝试打印 __proto__
常规对象的属性,例如 {}.__proto__
或foo.__proto__
,你得到[object object]
;这个[object object]
是另一个对象的原型(prototype)。但是,如果您尝试打印 __proto__
任何函数的属性,它都会给你 function () { [native code] }
。这是为什么 ?它不应该返回Function
对象的原型(prototype)吗?继承自,哪个应该是一个对象而不是另一个函数(如 function(){native code]}
)? __proto__
怎么可能?一个函数的 是另一个函数而不是一个对象,就像其他原型(prototype)一样?
*我知道应该使用 Object.getPrototypeOf(obj) 而不是 proto,但我使用它,因为它更短。
如果有人向我解释以上内容,我也将不胜感激。如果您对我的问题有任何疑问,请在评论中提问,而不是投反对票。
最佳答案
原因
Function.prototype.toString()
将返回
"function (){ [native code] }"
Function.prototype 是一个对象,但当您打印它时,它会被类型转换为字符串,并且作为原型(prototype)实现函数的行为:
function(){}.toString()
即使它不是一个函数,它也会打印出来。
function(){}
.__proto__ // Function.prototype
.__proto__ // Object.prototype
.toString() // "[Object object]
也许更容易想象:
class Human {
toString(){
return "Im a Human";
}
}
console.log(
(new Human).__proto__
);
//the Human.prototype tells you that it is a Human, however its just a class.
关于javascript - 为什么 Function.__proto__ 返回与其他原型(prototype)不同的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46129847/