1. 程式人生 > >關於prototype以及__proto__的一些理解

關於prototype以及__proto__的一些理解

神奇 lin 等等等 .proto ... AR func 個數字 under

prototype屬性只有函數對象才擁有,可以稱之為顯性屬性; __proto__每個對象都擁有包括函數對象,而這個稱之為隱性屬性。

function Lxy (){}; //一個構造函數

var b = new Lxy();// 這個時候 new做了幾個步驟。

//1. var b = {} 是個空對象(註意是個空對象!!),這也是為什麽new出來的實例沒有prototype屬性(廢話不是函數 當然沒有prototype了);

//2. b.__proto__ = Lxy.prototype 將b的原型對象指向 Lxy的原型。這也就是說 構造函數的 prototype指向可以理解為實例的原型對象指向

//3.Lxy.call(b) 讓b繼承Lxy prototype上的方法。

所以得出的結論可以理解為 : 函數的prototype指向是他的實例對象的__proto__指向

由此可以得出 Lxy.__proto__ == Function.prototype // true 如何理解呢?Lxy作為一個函數對象自然可以當成Function(底層封裝的構造函數)的實例;

var a = 1; a.__proto__ == Number.prototype // true a作為一個數字對象自然可以看成Number(底層封裝的構造函數)的實例; 不信你可以試試Number()

var c = ‘1‘; c.__proto__ == String.prototype // true 理由同上......

然後又因為 Number,String,Object,Function等等等等都屬於底層的構造函數(個人理解。。。。。)

所以 他們都可以理解為 Function 的實例對象

所以 Object.__proto == Function.prototype; // true

Number.__proto__ == Function.prototype // true

  Function.__proto__ == Function.prototype //true

最後又根據萬物皆對象。 所以 Function.prototype.__proto__ == Object.prototype // true 把Function.prototype 看做一個對象理解 他是根據Object實例出來的。(這不是打Object.__proto__ == Function.prototype 相互打臉了嗎。js是真的神奇 各種打我的臉,估計是我哪裏理解沒到位,怎麽理解?????? .....日後搞懂了來回答

那一切的源頭就是null Object.prototype.__proto__ == null 這也就是為什麽 typeof null 是object 的原因吧

關於prototype以及__proto__的一些理解