JavaScript中的函数是对象吗?

4
var obj = {};
var fn = function(){};
obj.prop = "some value";
fn.prop = "some value";
assert( obj.prop == fn.prop, "Both are objects, both have the property." );
assert(typeof(obj) === 'object', "Yes its an object");
assert(typeof(fn) === 'object', "why is this not an object");

我从周围的一些人那里听说函数是对象,到目前为止我也相信这一点,但是为什么第一个条件通过而第三个条件失败呢?


是的,没错。现在,typeof fn结果是什么? - user166390
2个回答

8
那是因为函数的直接类型"function"
但是,您错过了这个断言:
fn instanceof Object // true

顺便提一下,像"number""string"这样的类型严格来说不是Object的子类,尽管它们有方法,但从某种意义上讲,它们就像对象一样;这正是JavaScript有趣之处 :)
另请参阅:typeof 及其各种值。

8

函数是对象,但它们是一种特定的对象类型。 typeof(fn) 应该返回 "function",这是 "object" 的一个子类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接