原型和原型鏈

2022-08-05 15:39:14 字數 2109 閱讀 3630

一切皆物件

每個函式都有乙個屬性叫做prototype。

這個prototype的屬性值是乙個物件(屬性的集合,再次強調!),預設的只有乙個叫做constructor(建構函式)的屬性,指向這個函式本身。

object的原型:

通過如下方法可以新增prototype的屬性

function

fn()

fn.prototype.name = '白十三';

fn.prototype.getyear = function

() ;

function

fn()

fn.prototype.name = '白十三';

fn.prototype.getyear = function

() ;

var fn = new

fn();

console.log(fn.name);

console.log(fn.getyear());

fn是乙個函式,fn物件是從fn函式new出來的,這樣fn物件就可以呼叫fn.prototype中的屬性。

因為每個物件都有乙個隱藏的屬性——「__proto__」,這個屬性引用了建立這個物件的函式的prototype。即:fn.__proto__ === fn.prototype

每個物件都有乙個__proto__,可成為隱式原型。

每個物件都有乙個__proto__屬性,指向建立該物件的函式的prototype。

是object.prototype確實乙個特例——它的__proto__指向的是null,切記切記!

乙個物件要麼是類似於 new fn()出來的要麼是new object()建立出來的,所以物件的_proto_都會指向 fn.prototype或者object.prototype。

自定義函式的prototype本質上也是物件,就是和 var obj = {} 是一樣的,都是被object建立,所以它的__proto__指向的就是object.prototype。

函式也是一種物件,函式當然也有__proto__

函式也不是從石頭縫裡蹦出來的,函式也是被建立出來的。誰建立了函式呢?——function——注意這個大寫的「f」。

以上**中,第一種方式是比較傳統的函式建立方式,第二種是用new functoin建立。

首先根本不推薦用第二種方式。

這裡只是向大家演示,函式是被function建立的

function也是乙個函式,函式是一種物件,也有__proto__屬性。既然是函式,那麼它一定是被function建立。所以——function是被自身建立的。所以它的__proto__指向了自身的prototype。

總結:每個函式都有乙個屬性叫做prototype。

物件是被函式建立的,物件都有__proto__屬性,指向建立了該物件的函式的prototype。

函式一定是被function建立的,函式也是物件,物件都有__proto__屬性,函式的__proto__屬性,指向function的prototype。

prototype也是物件,都是被object建立,所以它的__proto__指向的就是object.prototype。

object.prototype的_proto_指向null

function是被自身建立的,所以它的__proto__指向了自身的prototype。

原型 和 原型鏈

每乙個js物件 null除外 都和另乙個物件相關聯。另乙個 物件就是我們熟知的原型,每乙個物件都從原型繼承屬性。所有通過物件直接量建立的物件都具有同乙個原型物件,並可以通過js object.prototype 獲得對原型物件的引用。通過關鍵字new和構造函式呼叫建立的物件的原型就是建構函式的 pr...

原型和原型鏈

原型鏈 例項物件與原型之間的連線,叫做原型鏈 function human human.prototype.age 22 var a new human console.log a.age 這裡的age掛載到了human的原型上面了。其實原型就是乙個物件。a為什麼能找到原型上面的物件呢?這裡例項物件...

原型和原型鏈

建構函式 function foo name age function 其實是 var a new object 的語法糖 var a 其實是 var a new array 的語法糖 function foo 其實是 var foo new function 的語法糖 new乙個物件的過程 建立乙...