\_\_proto\_\_就是一個典型的“ 私有屬性”。
一個對象的\_\_proto\_\_屬性指向該對象的原型,雖然他存在于對象的屬性列表中,但是卻不希望程序員直接用代碼去操作他。
甚至有的瀏覽器就在實現上限制訪問\_\_proto\_\_。
實際上,在對象上的“ 私有屬性”跟普通屬性是一樣的,但是有的對象被構造出來,存在著不希望被人直接修改的部分。
作為約定,JS程序員把一個前后都是【\_\_】符號的變量作為一個對象的私有屬性。
因此,不直接訪問私有屬性的原因可以歸結為兩點:
* 一是避免破壞了對象的狀態,產生預期外的行為。
* 二是兼容不同的運行環境。
~~~
var foo = {};
foo.__proto__ = null;
foo.toString()//foo.toString is not a function
~~~