object與Function的關係總結

2021-09-10 19:51:55 字數 1877 閱讀 4740

弄清楚這兩者的關係前,有兩句話是之後所有推論的基礎:

1. 首先object和function都是建構函式,而所有的建構函式的都是function的例項物件.因此object是function的例項物件

2.function.prototype是object的例項物件

由以上兩句話直譯就是:

object.__proto__ === function.prototype

function.prototype.__proto__ === object.prototype

3.又由例項物件的原型(我們以__proto__來表示)會指向其建構函式的prototype屬性,有

function.__proto__ === function.prototype

4. 當我們訪問乙個屬性值的時候, 它會沿著原型鏈向上查詢, 直到找到或者到object.prototype.__proto__(為null)截止.

假如我們有以下例子:

var foo = {},

f = function(){};

object.prototype.a = 'value a';

function.prototype.b = 'value b';

console.log(foo.a) // value a

console.log(foo.b) // undefined

console.log(f.a) // value a

console.log(f.b) // value b

那麼

foo.a的查詢路徑: foo自身: 沒有 ---> foo.__proto__(object.prototype): 找到value a

foo.b的查詢路徑: foo自身: 沒有 ---> foo.__proto__(object.prototype): 沒有 ---> foo.__proto__.__proto__ (object.prototype.__proto__): 沒有

f.a的查詢路徑: f自身: 沒有 ---> f.__proto__(function.prototype): 沒有 ---> f.__proto__.__proto__(object.prototype): 找到value a

f.b的查詢路徑: f自身: 沒有 ---> f.__proto__(function.prototype): 找到value b

4.關於instanceof的結果不要僅從字面上理解, 它的計算規則是: 如果右側建構函式的prototype屬效能在左側的物件的原型鏈中找到, 那麼就返回true, 否則就返回false

object intanceof function: object.__proto__ === function.prototype, 因為結果為true

function instanceof object: function.__proto__.__proto__ === object.prototype, 因為結果也為true

至於你說的, object和function互為例項物件是不對的,應該是 :object是function的例項物件, function.prototype是object的例項物件

5.例項物件的constructor屬性指向其建構函式, 因此object.constructor === function, function.constructor === function.

所以總結:

object 物件,拿不到 function 原型上的屬性   而 funtion 物件可以拿到 object 原型上的屬性

關於Function類與Object之間的關係

js中的所有類,本身具有三種身份 1.函式 可以直接被呼叫 2.物件 應該有其所屬類鏈 3.類,擁有prototype原型 原型所指例項中必然存在constructor函式,同時,這個constructor指標本身就是指向這個函式本身!關於 proto 1.proto 稱為原型鏈 2.js中的所有物...

原型鏈中Function與Object的關係

原型鏈中function與object的關係 最近在找工作,面試的時候有遇到原型相關的一些問題,個人又有點暈,回答的 不是很好,現在總結一下 object.proto function.prototype function.proto function.prototype array.proto f...

js關於Function和Object的原型的理解

我們在 function 和 object 的關係之前。可以先不討論 object的特殊性,先考慮function的特殊性。我們在 小紅書資料型別一章講到 object 通過物件直面量和 通過建構函式的方式建立的 物件例項是有差別的。我們先通過 來感受一下這些差別 function object v...