原型鏈二 Function的原型鏈問題

2021-09-13 18:08:17 字數 2938 閱讀 5448

要理解function的原型鏈的問題

首先深入理解__proto__

__proto__的含義是例項物件指向例項原型!!

例項的原型物件就是建構函式.prototype

例如

function person() 

var person = new person();

console.log(person.__proto__ === person.prototype); // true

所以:

重點理解:例項物件.__proto__指向例項原型物件

參考原部落格__proto__的那個部分

挖來下圖

理解之後我們來看function

1在宣告函式的時候

有一種宣告方法是function 建構函式

下面參考阮一峰

第三種宣告函式的方式是function建構函式。

var add = new function(

'x',

'y',

'return x + y'

);// 等同於

function add(x, y)

也就是說function是乙個建構函式,用來生成函式的建構函式.那麼,string(),boolean(),number()這些函式都是function構造出來的,new出來的,也就是說string(),boolean(),number()這些函式(函式也是廣義物件)是function例項物件.那麼例項物件.__proto__指向例項原型物件也就是說

string.__proto__===function.prototype//true

number.__proto__===function.prototype//true

boolean.__proto__===function.prototype//true

object.__proto__ === function.prototype//true

不只是上述建構函式,實際上,

任意函式的__proto__都===function.prototype

所有函式.__proto__===function.prototype
因為任意函式都是function()new(構造)出來的.

任意函式都是function()建構函式的例項

關於function最奇特的是

function.__proto__===function.prototype//true
因為所有函式例項.__proto__就是function建構函式的原型(function.prototype),函式而函式例項也包括他自己.

深入理解:

function作為乙個函式物件例項,他有__proto__,指向原型

function又作為乙個構造函式,他有自己的protoype,指向原型

所以

function.__proto__===object.protoype//false
也就是說

更深層次的理解:

2function也可以看作是string()或者boolean()number()同等地位

因為所有函式.prototype雖然是例項原型,但是例項原型本質還是乙個物件,也就是說所有的例項原型物件是object()建構函式的例項,即

string.prototype.__proto__=== object.prototype//true

number.prototype.__proto__=== object.prototype//true

boolean.prototype.__proto__=== object.prototype//true

//同理

function.prototype.__proto__=== object.prototype//true

function總結:

例項物件.__proto__===建構函式.prototype
其中例項物件是建構函式構造的例項.

原型鏈:

每層的__proto__都指向上一層的原型,所以一層一層的__proto__組成的鏈就成為原型鏈.

最終

object.prototype.__proto__

//null

原型鏈中Function與Object的關係

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

原型 原型鏈

var animal function var dog function animal.price 2000 dog.prototype animal var tidy new dog console.log dog.price 為什麼輸出 undefined console.log tidy.pr...

原型,原型鏈

原型object.hasownproperty proname object 乙個物件的例項 propname 乙個屬性名稱的字串值 返回乙個布林值原型鏈中的this 原型物件 原型物件的作用 一般情況下,會把方法宣告在原型物件裡。目的是實現繼承。當物件訪問自身屬性或方法時,先從自身找有沒有,如果有...