2012-12-27 42 views
3
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"); 

我從functions are objects周圍的一些人聽到,這就是我至今相信,但爲什麼是第一個條件passes以及和第三個fails函數是javascript中的對象?

+0

是的,是的,他們是。現在,'typeof fn'的*結果*是什麼? – 2012-12-27 00:09:30

回答

7

這是因爲直接函數的類型是"function"

但是,你錯過了這一說法:

fn instanceof Object // true 

順便說一句,類型,如"number""string"嚴格不是Object後裔,即使他們是在這個意義上對象,他們有方法;只是使JavaScript有趣的那些東西之一:)

另請參閱:typeof及其值的範圍。

7

功能對象,但它們是特定的類型的對象。 typeof(fn)應評估爲「功能」,這是「對象」的子類型。