- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
根据 this ,函数依次继承自Function
和Function
自Function.prototype
:
The global
Function
object has no methods or properties of its own, however, since it is a function itself it does inherit some methods and properties through the prototype chain fromFunction.prototype
.
那么 Function.prototype
有什么意义呢?为什么不将其属性移动到 Function
并让 Function.prototype
为 undefined
?函数将派生自 Function
。
同样适用于 Object
等
最佳答案
functions inherit from
Function
您是在松散地引用 MDN。它实际上说的是:
function objects inherit from
Function.prototype
请注意,在 MDN 页面上,上面句子中的首字母“function”是大写的,但这只是因为它在句子的开头,并不是因为它指的是 JS 对象 Function
。它指的是声明为 function() { }
的常规旧函数。
请记住,MDN 是由凡人编写的。我宁愿他们不使用“继承”和“继承”这些词,更不用说“派生”了。 JS没有严格意义上的继承这个概念。如果你使用这个术语,你最终会把自己弄糊涂。 JS 拥有的是与对象关联的原型(prototype)。当访问一个对象的属性时,如果没有找到,就会查询原型(prototype)。如果在那里找不到,因为原型(prototype)也是具有原型(prototype)的对象,所以会查询原型(prototype)的原型(prototype),依此类推。
因此,上面这句话最好写成“函数对象have as their prototype Function.prototype
”。
JS Function
对象不直接与 Function.prototype
关联,除了 Function.prototype
是 Function
,而且,由于 Function
对象本身就是一个函数,它本身就有 Function.prototype
作为它的原型(prototype)。无论 Function
中可能存在或不存在的任何属性,或由您附加在其上的任何属性,都与原型(prototype)链无关,也不会被任何人“继承”。
当您执行 (function() { }).call()
时,首先会在函数对象本身上查找 call
属性/方法;如果它在那里不存在(通常不存在),则在声明函数时固有分配的原型(prototype)上查找它,即 Function.prototype
。如果不在 Function.prototype
上,您还会在哪里放置诸如 call
或 apply
之类的方法?除了 Function.prototype
之外,您还会将自动分配给函数的原型(prototype)称为什么?
顺便说一句,请注意 Function.call
将正确解析为内部 call
函数。为什么?不是因为那是 call
存在的地方,也不是因为那是常规函数“继承”call
的地方,而是因为,正如我之前提到的,Function
本身是一个函数,因此有原型(prototype)Function.prototype
,call
可以在它的原型(prototype)链上找到。
What's the point of
Function.prototype
then? Why not move its properties toFunction
and letFunction.prototype
be undefined? Functions would be derived fromFunction
instead.
X.prototype
是 X 的一个属性,用作使用 X 作为构造函数创建的对象的原型(prototype)。因此,要将正确的原型(prototype)分配给使用 Function
作为构造函数创建的对象(包括声明为 function x() { }
的函数),原型(prototype)必须作为Function
上的 prototype
属性。
关于javascript - Function 和 Function.prototype 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33875021/
以下代码,我使用 chrome 浏览器控制台进行了检查: function A(){ this.a='a' } 这是一个构造函数。我已经将一个属性 b 赋给了 A 的原型(prototype)。
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它. 5年前关闭。 Improve this
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它. 3年前关闭。 Improve this
我已经开始阅读 The Pragmatic Programmer,我很喜欢并学习堆形式,但我很难理解示踪子弹和原型(prototype)之间的区别。跟踪项目符号是否像拥有应用程序的所有 View 但尚
尽管阅读了 StackOverflow 上的大多数文章,但我现在实际上对原型(prototype)非常困惑。 function Foo() { } Foo.prototype.speak = func
我正在阅读以下代码,并开始想知道 Rectangle.prototype = Object.create(Shape.prototype) 和 Rectangle.prototype = Shape.
我想知道它们之间的区别: childObj.prototype = Object.create(parentObj.prototype) 和 childObj.prototype = parentOb
这个问题在这里已经有了答案: Why wouldn't I use Child.prototype = Parent.Prototype rather than Child.prototype =
在 node.js 中导出原型(prototype)的首选方法是什么?您可以采用两种方法: 导出原型(prototype)本身 function A () { } module.exports = A
我正在学习 JavaScript,发现了两种分配原型(prototype)的方法。 第一个是A.prototype = B.prototype,第二个是A.prototype = new B() 例如
在一些构造函数的定义之后,例如 child ,我见过以下两种形式: Child.prototype = Parent.prototype; 或 Child.prototype = new Parent
我正在阅读一本关于 OOP javascript 的书,但被其中一个示例卡住了。 在示例代码的第一个版本中,Shape 的一个新实例构造函数被创建并且 toString方法被调用。 toString方
这个问题在这里已经有了答案: What should I connect to the child prototype property in JavaScript (2 个答案) 关闭 8 年前。
在进行原型(prototype)设计时,您在多大程度上放弃了最佳实践来支持代码和修复黑客攻击?当然,代码并不打算在完整的生产环境中保留。 补充:我正在研究一个用 Python 制作的相当大的半工作原型
我正在尝试使用 Prototype 更新隐藏表单字段的值。表单域: 我正在尝试使用原型(prototype)更新值: var additionalVal = ',2'; var itemId = $
我正在阅读How to Make a Javascript Library我发现了作者所说的一个观点: function _() { //Some obects and var
我想用一个新函数扩展“Number”类型,因此我必须定义一个原型(prototype)。当我想到这一点时,我得到了一堆问题: Number 是否既继承了 Object.prototype 又继承了 F
这里好像有区别... 假设我们有 function MyConstructor() {} MyConstructor 的[[Prototype]] 是Function.prototype,不是 MyC
有人建议 Derived.prototype = Object.create(Base.prototype); 优于 Derived.prototype = new Base(); (如 this S
我是一名优秀的程序员,十分优秀!