关于Function.prototype - CNode技术社区

关于Function.prototype
发布于 13 年前 作者 yakczh 6090 次浏览 最后一次编辑是 9 年前
 console.log(Array instanceof Function);
 console.log([] instanceof Function); 
 console.log([] instanceof Object); 
 console.log(Array instanceof Object); // true
 console.log(Function instanceof Object); // true 
 console.log(Object instanceof Function); //true
 console.log(Object instanceof Object); //true
 console.log(Function instanceof Function); //true

从Array instanceof Object就有点费解了,一般构造函数都是Function 就是一段代码,最后怎么都找到{}上去了? 通常的 Xx.prototype是一个 {}之类的东西,但 Function.prototype是一个function ,但是 Function.prototype的这个function是通过什么跟{}有关系了?

8 回复

function 也是一个对象

对象不是 {k:v} 这种的吗? console.log(typeof Function.prototype); 这个显示的不是object

JS 里对象的意思, 我理解简单点就是 x, 可以设置 x.y 来设置属性 比如 "string" 类型是字符串, 可同时 "string".llength 这样也可以 还有就是函数 f, 也有 f.toString, 你设置一个 f.xy= 1 那也可以 {k, v} 这种形式成为 Map 结构更合适, 也许说 JS 里目前根本没有 Map 这种数据类型...

至于构造器和原型的问题, 表示也理不清楚, 大概 JS 是有缺陷的

@yakczh 你试试 console.log(typeof Function.prototype.__proto__) 就知道啦,

@yakczh {k:v}只是表现形式, 其实javascript有点像面向函数的味道,代码就是数据,数据就是代码, function和object是等价的

 console.log(Function === Function.constructor ); 
 console.log(Object === Object.constructor ); 

这个Function 竞然自己构造自己 根据原型链 好象是这么个关系

null -> {} --> [Function: Empty] --> [Function: Function] --> [Function: XXX]

一般的构造器只能在 [Function: Function] --> [Function: XXX] 这个阶段 [Function: Function] 构造了各种轮子[Function: XXX] 也构造了 [Function: Function] 自己, 听起来好象有点乱

《编写高质量代码的XXX个建议》这个系列的丛书不错 其中的JavaScript那本就对这个有详细的讲解 当然还有其他的建议你买本瞅瞅

回到顶部

AltStyle によって変換されたページ (->オリジナル) /