弄清楚這兩者的關係前,有兩句話是之後所有推論的基礎:
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...