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