感覺(jué)知識(shí)點(diǎn)有些瑣碎,有忽略到的知識(shí)點(diǎn)希望大家可以交流...
1.當(dāng)在對(duì)象里定義get / set 方法時(shí),語(yǔ)法格式是:
var o = {
????get func(){}
????set func(){}
}
而在Object.defineProperty中重新定義屬性時(shí),語(yǔ)法卻是這樣(假設(shè)obj里有一個(gè)“name"屬性
Object.defineProperty(obj,"name",{
????get: function(){}
????set: function(){}
})
2.在定義對(duì)象時(shí),所有的數(shù)據(jù)屬性默認(rèn)為true(其中包括configurable,enumrable,writable,value),當(dāng)然value是賦值的
當(dāng)調(diào)用Object.defineProperty時(shí)所有默認(rèn)為true的屬性都變?yōu)閒alse,只有自己手動(dòng)去設(shè)置為true,configurable為true時(shí)代表傳入Object.defineProperty的對(duì)象屬性時(shí)可修改或者delete的,而enumrable是可枚舉的(即能在for in循環(huán)中輸出),writable代表屬性值是否可寫(xiě)
3.對(duì)于視頻中的例子,因?yàn)椴惶浀盟灾荒茏约簢L試寫(xiě)了..
var o = { value : 1};
Object.defineProperty(o,value,{writable:false});//此時(shí)除writable其他屬性已經(jīng)變?yōu)閒alse;
o.value;//值為1
o.value = 100;//因?yàn)閷傩詗ritable為false,所以值不可寫(xiě)
o.value;// 值還是為1
var obj = Object.create(o);//創(chuàng)建一個(gè)以o為原型的新對(duì)象
obj.value;// 值為1,通過(guò)實(shí)例-> 原型可查找到
obj.value = 100;//此時(shí)為obj添加了一個(gè)實(shí)例屬性,值為100,覆蓋原型o中的value
obj.value;//值為100
delete obj.value//因?yàn)槟J(rèn)的數(shù)據(jù)屬性都為true,所以可刪除
obj.value;//此時(shí)的value屬性又是原型o中的value了
2016-04-25
Object.defineProperty(obj, 'z',?
{value : 100, configurable: true});
最后只能這樣修改OBJ的z值!
2016-04-23
錯(cuò)了?。?duì)于第三點(diǎn),當(dāng)對(duì)象用defineProperty這種方式定義屬性時(shí)。且writable為false。該對(duì)象的子對(duì)象也是不可寫(xiě)的,所以你的obj.value再怎么更改也是1、除非你用defineProperty再去定義obj中的value屬性,視頻中的最后幾分鐘的例子就是在說(shuō)明這個(gè)?。≌?qǐng)?jiān)倩厝プ屑?xì)看看?。?/p>
2016-03-23
真棒!