Object.defineProperty了解一下
? ? 可以理解為給屬性定義屬性的方法
? ? 具體例子

這里我們給book添加了name,和page二個屬性,通過屬性給其設置值和取值的時候會調(diào)用我們定義的set,get方法。
Vue中就是靠這個方法給每一個對象嵌套般的加了get,set方法,并且要達到響應式,要求是對象上已定已的屬性,后期添加的不算,但是可以通過Vue.set這個全局方法給其添加,因為當初定義的都可以使用這個方法添加上,但是你后添加的屬性并沒有執(zhí)行這個方法,所以無法實現(xiàn)響應式,基于此,我們可以類比數(shù)組, 比如一個數(shù)組 var arr = [1,2,3] 這時候可以認為arr的數(shù)組索引是他們的屬性,arr[index]是能取到值的,想當于屬性去訪問值,因此我們可以認為0,1,2是arr的屬性,如果是在vue中,可以認為Vue給0,1,2添加了get,set方法,但是比如我們給arr[3]=3,這時候3這個(屬性)下標被賦值了一個3,想當于添加了一個屬性,但是不要忘了,這是后添加的,因此vue給數(shù)組都實現(xiàn)了怪異方法實現(xiàn)響應式(具體可見官網(wǎng)介紹)。
js每日tips
? ? 1.非Object的原型對象.__proto__指向Object.prototype 而Object.prototype.__proto__=null
? ? 2.所有的構(gòu)造函數(shù) Function Object Date Array Regxp 等等其他內(nèi)置函數(shù)的__proto__ 都是Function.prototype
? ? 3.一般來說被new出來的對象三步到頭==》null
? ? ? ? eg: function Person(){ this.name =name}
? ? ? ? ? ? var p1 = new Person()
? ? ? ? ? ? p1.__proto__=Person.prototype
? ? ? ? ? ? p1.__proto__.__proto__=Object.prototype
? ? ? ? ? ? p1.__proto__.__proto__.__proto__=null
? ? 而構(gòu)造函數(shù) Person
? ? Person.__proto__=Function.prototype
? ?Person.__proto__.__proto__=Obejct.prototype
Person.__proto__.__proto__.__proto__=null