Javascript 功能原型的含义是什么?

Javascript 功能原型的含义是什么?,javascript,function,object,prototype,Javascript,Function,Object,Prototype,我是Javascript的初学者,正在学习面向对象的和原型设计 据我所知,Object是一个函数,是由函数创建的,因为Object.\uuu-proto\uuuu==function.prototype但是通过在线查看各种图表,我对如何function.prototype.\uu-proto\uu==Object.prototype感到非常困惑 Function.prototype.\uuuu proto\uuuu是什么意思 它不是由语言所有者开发的东西吗?因为函数是所有东西首先到达的东西 那是

我是
Javascript
的初学者,正在学习
面向对象的
原型设计

据我所知,
Object
是一个函数,是由函数创建的,因为
Object.\uuu-proto\uuuu==function.prototype
但是通过在线查看各种图表,我对如何
function.prototype.\uu-proto\uu==Object.prototype
感到非常困惑

Function.prototype.\uuuu proto\uuuu
是什么意思

它不是由语言所有者开发的东西吗?因为函数是所有东西首先到达的东西


那是什么意思?我缺少一些重要的事实吗?我查看了其他StackOverflow答案,但找不到任何与之相关的内容。

myFunc.prototype
是通过调用
new myFunc()
构造的任何对象的
\uuuuuuuuuuuuuuuuuuuuuu

从经典(Java或C++风格)OO的角度考虑,你可以说
myFunc
是一个构造函数,因此
myFunc.prototype
就是这个类。从这个意义上说,
myFunc.prototype.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;也就是说,使用
new myFunc
创建的所有对象的原型的原型

对myFunc.prototype.\uuuu proto\uuuu
可以做的一件有用的事情是分配给它以创建超类关系,例如

myFunc.prototype.__proto__ = mySuperclassConstructor.prototype
这个成语解释了为什么
Function.prototype.\uu-proto\uu===Object.prototype
成立(你问题的核心):它仅仅意味着
Function
Object
的一个子类,或者换句话说,JavaScript运行时在其前奏中做了与上述代码片段等效的事情,以便使
函数
成为
对象
的子类(根据§§19.2.2和19.2.3,它们应该这样做)

不过要小心,尽管在所有现代(2019年)JavaScript实现(node.js和浏览器)上都使用了
\uuuuu proto\uuuu
,但它的使用非常简单

TL;博士

\uuuu proto\uuuu
对象的属性,可用于在原型链中查找。而
prototype
函数
的一个属性,它允许您向构造函数添加可共享的功能

长话短说

通过一个例子来理解这一点,假设您创建了一个构造函数

函数A(){}
然后创建它的一个实例,
var A=new A()

然后,添加一个函数,如下所示:

A.prototype.getA=function(){return'A';}

现在,如果您尝试访问
a.getA()
,您将得到结果,即将执行
getA

但是,即使在创建实例
a
之后添加了
getA
,它如何知道函数
getA
。这是因为使用了
\uuuu proto\uuuu
,您可以在链中向上遍历(您一定听说过原型链)

从技术上讲,
\uu proto\uu
是对象的属性,而
prototype
函数的属性。但是
函数
怎么会有属性呢?因为JavaScript中的所有内容都隐式转换为对象。你有没有想过你怎么能做这样的事情:
'test'.toUpperCase()
?字符串文字不是“非对象”并且它们是原语吗

请阅读以下内容以供参考:

现在回答你的问题:

Function.prototype.\uuuu proto\uuuu
是什么意思

您正在尝试访问
函数
构造函数的
原型
属性。请记住,
prototype
本身是一个
对象
,因此您可以访问诸如
构造函数
\uuuuuuuuuu
之类的属性

Function.prototype.\uuuu proto\uuu==Object.prototype

要启用链接,当您访问
\uuuu proto\uuu
属性时,您正在查找

任何函数都可以访问对象的所有属性。怎么做


Object
的属性,比如说
toString
。您可以执行,
A.toString()//一开始创建的A
。但是我们从来没有为
a
构造函数创建函数
toString

它可能很有用:proto的可能副本总是指对象的超类型,因此在我们的例子中,如果它的后缀是Function.prototype,则它将类似于object.prototype,因为对象是function@BenFortune请理解我的问题。我的怀疑是从你们张贴的问题图表中产生的。它是如何复制的?
\uuuuu proto\uuuu
是一种不推荐使用的访问对象原型的方法(不是prototype属性,而是内部
[[prototype]]
插槽)。现代的方法是
Reflect.getPropotypeOf
<代码>函数.prototype
对象的实例,继承自
对象.prototype
。因此,您添加的所有内容
Object.prototype.test='test';将继承console.log((function(){}).test)