Javascript 什么是函数';原版?

Javascript 什么是函数';原版?,javascript,Javascript,我看到了这个漂亮的图表,我在我的Chrome浏览器中做了一些测试,但我不知道如何解释这一点: > Function.prototype function Empty() {} > Function.__proto__ function Empty() {} > typeof(Empty) "undefined" 什么是函数Empty(){},为什么函数.prototype是函数而不是对象,就像对象.prototype 从上图来看,JavaScript中的一切似乎都

我看到了这个漂亮的图表,我在我的Chrome浏览器中做了一些测试,但我不知道如何解释这一点:

> Function.prototype
  function Empty() {}
> Function.__proto__
  function Empty() {}
> typeof(Empty)
  "undefined"
什么是
函数Empty(){}
,为什么
函数.prototype
函数
而不是
对象
,就像
对象.prototype


从上图来看,JavaScript中的一切似乎都是从对象开始的。
原型
,我说得对吗?

首先,
函数Empty(){}
表示形式是东西

在V8中,
Function.prototype
对象的
Function.prototype.name
属性值为
Empty
,因此我猜您可能正在使用Chrome的开发者控制台,它以这种方式显示函数的名称

函数对象的
名称
属性是
非标准的
(不是ECMA-262的一部分),这就是为什么我们看到实现之间的差异

现在,
Function.prototype
是一个函数,它总是返回
undefined
,可以接受任意数量的参数,但为什么呢?。可能只是为了一致性,每个内置构造函数的原型都是这样的,
Number.prototype
是一个
Number
对象,
Array.prototype
是一个
Array
对象,
RegExp.prototype
是一个
RegExp
对象,等等

唯一的区别(例如,任何函数对象和
函数.prototype
)显然是
函数.prototype
继承自
对象.prototype

javascript中的一切似乎都是从Object.prototype开始的,我说的对吗

嗯,你是对的
Object.prototype
是大多数对象的原型链的最后一个对象,但在ECMAScript 5中,你甚至可以创建不从任何对象继承的对象(就像
Object.prototype
是),并形成另一个继承链,例如:

var parent = Object.create(null),
    child = Object.create(parent);

Object.prototype.isPrototypeOf(parent);  // false

Object.getPrototypeOf(parent);           // null
Object.getPrototypeOf(Object.prototype); // null

要整合CMS,请回答以下问题:

javascript中的一切似乎都是从Object.prototype开始的,我说的对吗

绝对地,JavaScript中的对象链接到基本对象。继承链在运行时工作,因此如果修改了基础对象,链接到它的所有对象都将立即继承修改。如果对象没有方法或属性,Javascript实现将遵循原型链,直到找到它,否则将失败


\uuuuu proto\uuuuu
是原型的非标准访问器,跨浏览器支持,但IE不支持。无论如何,应用程序代码不会使用它。

这个难题的答案是函数。\uuuuu proto\uuuu==Object.prototype。但是你不能通过Function.constructor.prototype达到目的,因为它被设置为undefined(或者根本没有设置)。+1我一直认为解释某事最直接的方法是画一张图片/图表,让它说话。谢谢在这里附上图表!实际上,我仍然很想知道为什么控制台通常将Function.prototype的类型显示为Function,而将所有其他类型的RegExp、String、Number显示为Object。我知道你提到过,但为了一致性??请再说明一下it@Gurjit,
typeof Function.prototype==“Function”
因为在“可调用对象”(函数)上使用
typeof
运算符时返回“Function”。您可以清楚地调用它:
Function.prototype()===undefined