JS學習總結4(原型與原型鏈)

2021-09-23 10:27:18 字數 1652 閱讀 2947

函式是物件,也就是說函式也是由若干屬性組成的。js預設給每個函式乙個prototype屬性,其值就是原型物件。

每個函式都有乙個prototype屬性,其值是原型物件。原型物件預設只有乙個constructor屬性,指向這個函式本身。

原型物件也是物件,也是由若干屬性組成的,不僅僅只有constructor屬性。例如函式object,其原型物件是object.prototype。

當然,我們也可以在原型物件上自定義一些屬性,然後進行訪問。

function fn()

fn.prototype.name = "張三";

fn.prototype.age = 20;

var fn = new fn();

console.log(fn.name);//張三

上述**中,fn是乙個函式,fn物件是從fn函式new出來的,這樣fn物件就可以呼叫fn.prototype中的屬性。為什麼fn物件可以訪問到fn原型物件中的屬性?往下看

每個物件都有乙個隱藏的屬性,即__proto__屬性。其值指向建立該物件的函式的原型物件,即

fn.prototype也是物件,那麼它也有__proto__屬性。其值指向建立該物件的函式的原型物件。那麼fn.prototype原型物件是由什麼函式建立的呢?它是個基本的物件,所以是由函式object建立的。即

object.prototype也是物件,那麼它也有__proto__屬性,但是它的值是指向null的。

用圖總結下它們之間的關係:

看完上圖關係,發現還有問題。函式也是物件,那函式應該也有__proto__屬性。那其值指向誰呢?

其實函式都是有由函式function建立出來的。例如:

var fn = new function("x","y","return x+y;");

console.log(fn(2,3));

但是我們一般建立函式時不用上述方式,而是用如下方式 建立函式

function fn(x,y)
但是其實我們要知道:函式都是有由函式function建立出來的。

另外還要注意兩點:1、函式funtion也是物件,其__proto__屬性指向誰?其實它是指向自身原型物件,它是由它自身建立的。

2、funtion.prototype原型物件是乙個普通物件,其__proto__屬性自然指向object.prototype。

所以總的關係圖如下:

在js中,一切都是物件,而且任何物件都會有__proto__屬性,所以會形成一條__proto__連起來的鏈條,這條鏈條稱之為原型鏈,其終點指向null。

js引擎查詢物件屬性時,先從自身屬性查詢,若沒有,則沿著原型鏈去查詢。

JS原型與原型鏈總結篇

函式物件 通過new function 得到的物件,有 proto 和prototype兩個屬性 普通物件 通過非function 函式new得的物件,有 proto 乙個屬性 總結 凡是通過 new function 建立的物件都是函式物件,其他的都是普通物件。例項的建構函式 constructo...

js 原型與原型鏈

5條原型規則 1.所有的引用型別 陣列 物件 函式 都具有物件特性,即可自由擴充套件屬性 除了 null 除外 2.所有的引用型別 陣列 物件 函式 都有乙個 proto 隱式原型 屬性,屬性值是乙個普通的物件。3.所有的函式,都有乙個prototype 顯式原型 屬性,屬性值也是乙個普通的物件。4...

JS原型與原型鏈

凡是通過new function 建立的物件都是函式物件,其他的是普通物件。var o1 var o2 new object var o3 new f1 function f1 var f2 function var f3 new function str console.log str conso...