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)
。