javascript中Obejct和Function到底是啥關係?

時間 2021-05-31 09:04:00

1樓:

function Object(){}和function Function(){}都是系統內建的建構函式,所以就形成了以下的原型鏈:

Object=>Function.prototype=>Object.prototype=>null

Function=>Function.prototype=>Object.prototype=>null

這也是為什麼Object instanceof Function;和Function instanceof Object;都為true的原因。

注意:Object.constructor == function Object(){}

Function.constructor == function Function(){}

兩者的constructor是不一致的。

var obj = {};其實是通過new Object()例項化出來的乙個物件,而原型鏈如下:obj=>Object.prototype=>null

因此obj instanceof Object為true,而obj instaceof Function為false。

再比如function

Foo(){}

varobj

=new

Foo();

如果是自定義的建構函式,形成的原型鏈如下:Foo=>Function.prototype=>Object.prototype=>null

通過自定義建構函式例項化出來的物件,形成的原型鏈如下:obj=>Foo.prototype=>Object.prototype=>null

instanceof運算子:用來測試乙個物件在其原型鏈中是否存在乙個建構函式的 prototype 屬性。

function

Foo(){}

varobj

=new

Foo();

alert

(obj

instanceof

Foo);

//true

Foo.

prototype

={};

alert

(obj

instanceof

Foo);

//false

2樓:dboy

Object 和 Function都是函式。

Object的全貌是

function Object

它是普通物件的建構函式,當你 var foo的時候,相當於例項化了Object,即new Object()。

Function的全貌是

function Function

它是函式物件的建構函式,當你 function foo的時候,相當於例項化了Function,即new Function()。

SF也有人問類似問題 Object和Function的原型鏈問題。

3樓:Jason Chen

首先明確一點,Object 和 Function 都是建構函式,和 object,function 不是乙個東西。

另外記住:instanceof 判斷的依據是你給的建構函式的 prototype 是不是在物件的原型鏈上。

MDN 的解釋:instanceof

通過 {} 字面量建立物件,是直接返回物件,不是返回的建構函式,返回的物件的原型就是 Object.prototype,顯然,Function.prototype 不在該物件的原型鏈上,所以執行結果如你所展示的:

({})

instanceof

Object

// true

({})

instanceof

Function

// false

接著,既然 Object 和 Function 都是建構函式,所以你用 typeof 的話,都返回 function。

既然是函式,那麼這兩個的原型指向 Function.prototype 也沒毛病,接著 Function.prototype 的原型是指向 Object.

prototype 的,所以就形成了如下的乙個原型鏈:

Object ---> Function.prototype ---> Object.prototype ---> null

// 這裡做個小試驗你就知道了

Object

.__proto__

===Function

.prototype

// true

Function

.prototype

.__proto__

===Object

.prototype

// true

所以執行結果如你所展示的:

Object

instanceof

Function

// true

Function

instanceof

Object

// true

更別說你那乙個函式來檢測,那當然也是 true:

(function

(){})

instanceof

Object

// true

(function

(){})

instanceof

Function

// true

至於 prototype,剛剛上面的小實驗也解釋了。

另外是建構函式,那麼 constructor 的問題,也解決了。

更加深入的原理 @貘吃饃香 貘大講的很清楚了。。。

4樓:

object和function都是functionobject 就是function

function 可以是object

object 不一定全是function

function 不一定是object

object 可以沒有function

javascript中object keys方法使用的問題(實操和書上寫的不相符)?

混混蛋 Object.keys obj 返回obj的自身 不包含原型鏈上的 的所以可列舉屬性的名字陣列 for in迴圈則包含原型鏈.for name in obj Object.getOwnPropertyNames obj 返回obj自身 不含原型鏈上的 的所有屬性名陣列,包括不可列舉的 想要獲...

javascript中Element nodeValue和innerHTML有什麼區別

DOM中的節點是分好幾種型別,常見的有 1.文件節點 document,唯一 2.元素節點 那些個標籤div,p之類 3.屬性節點 class,src這種 4.文字節點 插入在p,div內的文字 其它。其中element.nodeValue,是節點的值,其中屬性節點和文字節點是有值的,而元素節點沒有...

JavaScript中for和filter哪個效能更好?

bilibilili 首先你要先去看看 filter 是怎麼實現的。另外 for 迴圈裡面兩個優化點。看你這個判斷條件這麼簡單,沒必要在迴圈裡重新申請乙個變數了,另外不需要 break,直接 return 出去就完事兒了。另外說效能的話,除非你的陣列很長,子元素很大,一般情況來說,你感受不到效能區別...