代码片段一:
alert(Function instanceof Object); // true
alert(Object instanceof Function); // true
Function 是 Object 的实例,Object 也是 Function 的实例,好“纠缠”的关系。
代码片段一:
alert(Object.forEach); // undefined
Function.prototype.forEach = function(object, block, context) {
for (var key in object) {
if (typeof this.prototype[key] == "undefined") {
block.call(context, object[key], key, object);
}
}
};
alert(Object.forEach);
alert(Function.forEach);
alert(Object.forEach === Function.forEach); // true
给 Function 设置的原型方法 forEach,“有趣”的是 Object 也能够获取。
至于为什么可以从 JavaScript Object layout 图中获取部分解答:

看懂上图了没?如果看懂了,留道思考题给大家:
function Foo() {};
var foo = new Foo();
alert(foo instanceof Foo); // ?
alert(foo instanceof Object); // ?
alert(foo instanceof Function); // ?
alert(Foo instanceof Function); // ?
alert(Foo instanceof Object); // ?
witter:
共有10 条评论
好纠结的关系
沙发
Function 是 Object 的实例,Object 也是 Function 的实例好
由于此种“纠结”的关系,可以更方便地进行原型方法扩张吧!
沙发~
这种东西太烦人了,__proto__指向的是其构造函数的原型对象。
从图中,f1和f2都是foo的实例,也是Object的实例,
而Foo是Function和Object的实例,好纠结。
所以,貌似思考题中的,只有第三个是false吧?
[...] This post was mentioned on Twitter by 怿飞 and Fdream, Fdream. Fdream said: Object和Function的纠结关系(怿飞 @blankzheng):http://is.gd/bXIn2 [...]
[...] 看云谦的与 Function 和 Object 相关的有趣代码,公布下答案: 1 2 3 4 5 6 7 function Foo() {}; var foo = new Foo(); alert(foo instanceof Foo); // true alert(foo instanceof Object); // true alert(foo instanceof Function); // false alert(Foo instanceof Function); // true alert(Foo instanceof Object); // true [...]
我想知道,图是用什么软件画的
是不是因为Object()和Function本身就是一个构造函数,也就是说他们本身就是一个function,自然可以访问到function.prototype下面的方法,同理String.forEach、RegEx.forEach应该也没问题。
而js里又设定所有对象都是Object的实例
所以就出现了上面的奇怪现象?
[...] 变态的function与object,详见:http://www.planabc.net/2010/05/06/interesting_code_associated_with_function_and_object/ [...]
[...] 今天在怿飞的与 Function 和 Object 相关的有趣代码中发现了instanceof,觉得听陌生的,就去网上查了些资料。 [...]