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