Object 的静态方法之 defineProperties 以及数据劫持效果
生活随笔
收集整理的這篇文章主要介紹了
Object 的静态方法之 defineProperties 以及数据劫持效果
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
再提一下什么是靜態(tài)方法: 靜態(tài)方法:在類身上的方法,
動(dòng)態(tài)方法:在實(shí)例身上的方法 Object.defineProperties(obj, props)
obj:被添加屬性的對(duì)象
props:添加或更新的屬性對(duì)象
給對(duì)象定義屬性,
如果存在該屬性,則用新定義的屬性更新已存在的屬性,
如果不存在該屬性,則添加該屬性。
如果是新添加的屬性,一定要設(shè)置是否可枚舉,不然為false
enumerable(是否可枚舉):默認(rèn)為false
writable(是否可寫(xiě)):默認(rèn)為false
configurable:是否可刪除delete
Object.defineProperty()
在對(duì)象上定義新屬性,或修改對(duì)象現(xiàn)有屬性,并返回該對(duì)象。
Object.defineProperty(obj, 屬性名字, {設(shè)置屬性})
例子1: 1 let obj = { 2 name:'xx', 3 num:0 4 }; 5 Object.defineProperties(obj,{ 6 name:{ 7 value:'yy', 8 writable: false,//是否可重新賦值 9 enumerable: false,//是否可遍歷(枚舉) 10 configurable:false//是否可(配置)刪除 11 }, 12 age:{ 13 value:20, 14 enumerable: true 15 } 16 }); 17 18 obj.age = 30; 19 console.log(obj.age);//默認(rèn)不可寫(xiě),所以此處依然是 20 20 delete obj.name;//此處刪了一個(gè)不可刪除的屬性 21 console.log(obj.name);//當(dāng)然能顯示 yy
set(val){ //給 obj.num 賦值時(shí)會(huì)觸發(fā) set 方法
//val 是給 obj.num 賦值時(shí)的那個(gè)值
}
12 }); 13 console.log(obj.num < 5 && obj.num > 5);//true 14 /*num即小于5,又大于,就是應(yīng)為,第一次判斷obj.num時(shí)num=(n+=2)=4,符合了第一個(gè)條件,此時(shí)的n=4。 15 讀到第二個(gè)判斷的時(shí)候,再次觸發(fā)函數(shù),此時(shí)n+=之后為6,又符合了第二個(gè)判斷條件,所以出現(xiàn)了true*/
動(dòng)態(tài)方法:在實(shí)例身上的方法 Object.defineProperties(obj, props)
obj:被添加屬性的對(duì)象
props:添加或更新的屬性對(duì)象
給對(duì)象定義屬性,
如果存在該屬性,則用新定義的屬性更新已存在的屬性,
如果不存在該屬性,則添加該屬性。
如果是新添加的屬性,一定要設(shè)置是否可枚舉,不然為false
enumerable(是否可枚舉):默認(rèn)為false
writable(是否可寫(xiě)):默認(rèn)為false
configurable:是否可刪除delete
Object.defineProperty()
在對(duì)象上定義新屬性,或修改對(duì)象現(xiàn)有屬性,并返回該對(duì)象。
Object.defineProperty(obj, 屬性名字, {設(shè)置屬性})
例子1: 1 let obj = { 2 name:'xx', 3 num:0 4 }; 5 Object.defineProperties(obj,{ 6 name:{ 7 value:'yy', 8 writable: false,//是否可重新賦值 9 enumerable: false,//是否可遍歷(枚舉) 10 configurable:false//是否可(配置)刪除 11 }, 12 age:{ 13 value:20, 14 enumerable: true 15 } 16 }); 17 18 obj.age = 30; 19 console.log(obj.age);//默認(rèn)不可寫(xiě),所以此處依然是 20 20 delete obj.name;//此處刪了一個(gè)不可刪除的屬性 21 console.log(obj.name);//當(dāng)然能顯示 yy
例子2:數(shù)據(jù)劫持 效果
1 let obj = { 2 num:4 3 }; 4 let n = 2; 5 Object.defineProperty(obj,'num',{ 6 get:function(){ //取 obj.num 屬性時(shí)會(huì)觸發(fā) get 方法 7 /*數(shù)據(jù)劫持*/ 8 //當(dāng)你獲取這個(gè)屬性的時(shí)候,會(huì)調(diào)用 9 n += 2; 10 return n; 11 },set(val){ //給 obj.num 賦值時(shí)會(huì)觸發(fā) set 方法
//val 是給 obj.num 賦值時(shí)的那個(gè)值
}
12 }); 13 console.log(obj.num < 5 && obj.num > 5);//true 14 /*num即小于5,又大于,就是應(yīng)為,第一次判斷obj.num時(shí)num=(n+=2)=4,符合了第一個(gè)條件,此時(shí)的n=4。 15 讀到第二個(gè)判斷的時(shí)候,再次觸發(fā)函數(shù),此時(shí)n+=之后為6,又符合了第二個(gè)判斷條件,所以出現(xiàn)了true*/
?
轉(zhuǎn)載于:https://www.cnblogs.com/MrZhujl/p/9938505.html
總結(jié)
以上是生活随笔為你收集整理的Object 的静态方法之 defineProperties 以及数据劫持效果的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 多久微信图标怎么改
- 下一篇: 套接字设置为(非)阻塞模式