徹底搞懂js裡的 proto

2021-09-13 13:12:12 字數 1523 閱讀 2895

1.在js裡,萬物皆物件。方法(function)是物件,方法的原型(function.prototype)是物件。因此,它們都會具有物件共有的特點。即:物件具有屬性proto,可稱為隱式原型,乙個物件的隱式原型指向構造該物件的建構函式的原型,這也保證了例項能夠訪問在建構函式原型中定義的屬性和方法。

2.方法(function)方法這個特殊的物件,除了和其他物件一樣有上述proto屬性之外,還有自己特有的屬性——原型屬性(prototype),這個屬性是乙個指標,指向乙個物件,這個物件的用途就是包含所有例項共享的屬性和方法(我們把這個物件叫做原型物件)。原型物件也有乙個屬性,叫做constructor,這個屬性包含了乙個指標,指回原建構函式。

1.1首先宣告乙個物件和乙個函式,console.log一下物件和函式的proto

var a = function () {};

var b ={};

console.log(a.__proto__)

console.log(b.__proto__)

控制台輸出結果如下圖所示:

剛才不是說函式是物件嗎?它們的proto為啥不一樣?往下看,別著急。

var a = function () {};

var b ={};

console.log(a.__proto__.__proto__)

console.log(b.__proto__)

console.log結果如下:

是不是一樣了,,確實有點懵逼啊。。重點隱式原型指向構造該物件的建構函式的原型。因為function是特殊的物件,a.proto就指向了構造該函式的乙個函式(隨意起個名字 c),c的proto就指向了和b物件一樣的proto。。我自己都懵逼了。

1.2乙個物件和乙個函式,console.log一下物件和函式的prototype

var a = function () {};

var b ={};

console.log(a.prototype)

console.log(b.prototype)

console.log結果如下:

物件並不具有prototype屬性,只有函式才有prototype屬性。這就證明宣告2的說法是正確的。

總結:js裡所有的物件都有proto屬性(物件,函式),指向構造該物件的建構函式的原型。

只有函式function才具有prototype屬性。這個屬性是乙個指標,指向乙個物件,這個物件的用途就是包含所有例項共享的屬性和方法(我們把這個物件叫做原型物件)。原型物件也有乙個屬性,叫做constructor,這個屬性包含了乙個指標,指回原建構函式。

python裡的類 徹底搞懂Python中的類

python類的定義 python 中定義乙個類使用 class 關鍵字實現,其基本語法格式如下 class 類名 多個 0 類屬性.多個 0 類方法.注意,無論是類屬性還是類方法,對於類來說,它們都不是必需的,可以有也可以沒有。另外,python 類中屬性和方法所在的位置是任 意的,即它們之間並沒...

搞懂js函式柯里化

柯里化 currying 是把接受多個引數的函式變換成接受乙個單一引數 最初函式的第乙個引數 的函式,並且返回接受餘下的引數且返回結果的新函式的技術。簡單來說,以前寫乙個sum函式求兩數之和,呼叫時是sum a,b 而柯里化之後的呼叫方式則變成了sum a b 從呼叫方法可以看出,sum函式返回的一...

前端知識點分析 js裡的 proto

中定義了共享的屬性和方法 1.方法 function 是物件,方法的原型 function.prototype 是物件。因此,它們都會具有物件共有的特點。即 物件具有屬性 proto 可稱為隱式原型,乙個物件的隱式原型指向構造該物件的建構函式的原型物件,這也保證了例項能夠訪問在建構函式原型物件中定義...