日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Object 的静态方法之 defineProperties 以及数据劫持效果

發布時間:2023/11/30 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Object 的静态方法之 defineProperties 以及数据劫持效果 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
再提一下什么是靜態方法:   靜態方法:在類身上的方法,
  動態方法:在實例身上的方法 Object.defineProperties(obj, props)

obj:被添加屬性的對象
props:添加或更新的屬性對象

給對象定義屬性,
如果存在該屬性,則用新定義的屬性更新已存在的屬性,
如果不存在該屬性,則添加該屬性。

如果是新添加的屬性,一定要設置是否可枚舉,不然為false
enumerable(是否可枚舉):默認為false
writable(是否可寫):默認為false
configurable:是否可刪除delete

Object.defineProperty()
在對象上定義新屬性,或修改對象現有屬性,并返回該對象。

Object.defineProperty(obj, 屬性名字, {設置屬性})

例子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);//默認不可寫,所以此處依然是 20 20 delete obj.name;//此處刪了一個不可刪除的屬性 21 console.log(obj.name);//當然能顯示 yy

例子2:數據劫持 效果

1 let obj = { 2 num:4 3 }; 4 let n = 2; 5 Object.defineProperty(obj,'num',{ 6 get:function(){ //取 obj.num 屬性時會觸發 get 方法 7 /*數據劫持*/ 8 //當你獲取這個屬性的時候,會調用 9 n += 2; 10 return n; 11 },
       set(val){ //給 obj.num 賦值時會觸發 set 方法
         //val 是給 obj.num 賦值時的那個值

       }
12 }); 13 console.log(obj.num < 5 && obj.num > 5);//true 14 /*num即小于5,又大于,就是應為,第一次判斷obj.num時num=(n+=2)=4,符合了第一個條件,此時的n=4。 15 讀到第二個判斷的時候,再次觸發函數,此時n+=之后為6,又符合了第二個判斷條件,所以出現了true*/

?

轉載于:https://www.cnblogs.com/MrZhujl/p/9938505.html

總結

以上是生活随笔為你收集整理的Object 的静态方法之 defineProperties 以及数据劫持效果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。