Javascript 为什么函数.\uuuuu proto\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?

Javascript 为什么函数.\uuuuu proto\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?,javascript,prototype,Javascript,Prototype,如果您试图打印出一个常规对象的\uuuuuuuuuuuuuuuuuuuuuuu属性,比如{}.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;这是另一个对象的原型。但是,如果您试图打印出任何函数的\uuuu proto\uuuu属性,它将为您提供函数(){[native code]}。为什么呢?它不应该返回Function继承自的对象的原型吗?它应该是一个对象而不

如果您试图打印出一个常规对象的
\uuuuuuuuuuuuuuuuuuuuuuu
属性,比如
{}.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;这是另一个对象的原型。但是,如果您试图打印出任何函数的
\uuuu proto\uuuu
属性,它将为您提供
函数(){[native code]}
。为什么呢?它不应该返回
Function
继承自的对象的原型吗?它应该是一个对象而不是另一个函数(比如
Function(){native code]}
)?一个函数的
\uuuu proto\uuuu
怎么可能是另一个函数,而不是像其他原型一样的对象

*我知道应该使用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中,使用
var o=new f()
调用构造函数会创建一个新对象,并且 将
o.\uuuuu protoo\uuuu
设置为
f.Prototype
。同:

new Array().__proto__ == Array.prototype // true
new Number().__proto__ == Number.prototype // true
或:

Function
是一个构造函数,因此使用
new Function()
创建函数将其原型设置为
函数。原型

new Function().__proto__ === Function.prototype // true
或:

所有函数都有相同的原型,包括构造函数。因此:

Function.__proto__ == Function.prototype // true
Array.__proto__ == Function.prototype // true
Number.__proto__ == Function.prototype // true
Function.prototype
定义了所有函数继承的函数的默认行为,包括调用函数的能力,因此函数本身就是函数:

Function.prototype() // undefined
(new Function())() // undefined

你怎么打印?在这两种情况下都可能会发生类型转换…
document.write()
。为什么?为什么它不像其他对象那样返回
[object object]
?这意味着什么?@taurus导致函数。原型定义了函数的行为。这就是为什么它的行为像一个函数,而不是一个函数。原型只是一个函数?你能详细说明一下吗?对不起,这真的让人困惑。在一个完全不同的注释中,
如何发挥作用。protoprotoprotoprotoprototype
如何计算为
true
?这是否意味着
函数
函数
的一个实例?@taurus不,它是一个对象。是的,每个
function(){}函数实例
是的,但是为什么
函数
本身就是
函数
的实例呢?这难道不等于说孩子是自己的父亲吗?对我来说,这就像一个悖论。关于你在另一个答案中添加的关于价值和引用的评论,公认的答案基本上证明了大卫·弗拉纳根文章中所述的内容。
Function.__proto__ == Function.prototype // true
Array.__proto__ == Function.prototype // true
Number.__proto__ == Function.prototype // true
Function.prototype() // undefined
(new Function())() // undefined