當前位置:
首頁 > 知識 > 20+行代碼使用es5 Object.defineProperty 實現簡單的watch功能

20+行代碼使用es5 Object.defineProperty 實現簡單的watch功能

1 /**
2 * 一個簡單的demo 幫助理解defineProperty,只對Object類型參數有效
3 */
4 $watch=function(myObject,callback){
5 function initWatch(obj){
6 for(var i in obj){
7 if(typeof obj!="object"){
8 return;
9 }
10 (function(value,o,attr){
11 var v=value;
12 var oldValue=value;
13 Object.defineProperty(o,attr,{
14 get:function{
15 return v;
16 },
17 set:function (newValue){
18 oldValue=v;
19 v=newValue;
20 callback(newValue,oldValue)
21 }
22 });
23 })(obj[i],obj,i);
24 initWatch(obj[i]);
25 }
26 }
27 initWatch(myObject);
28 };
29 var a={
30   name:"Lee",
31   background:{
32     hometown:"De Zhou",
33     presentAddr:"Texas"
34   }
35 }
36 $watch(a,function(newValue,oldValue){
37   console.log(a.name+" moved from "+ oldValue + " to " + newValue);
38 })
39 a.background.presentAddr="New York"
40 //Lee moved from Texas to New York
41 //"New York"

Object.defineProperty方法是實現vue雙向綁定的重要api,關於該方法的詳細信息可移步:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty。這裡主要應用了其get/set函數的功能。對get/set方法而言,值得一提的是,當使用了get/set 方法後,原有的屬性便已經被對應的get/set方法所替代。

以上代碼簡單模擬了對一個object的watch功能,模擬ng或vue中的watch,對一個對象進行監聽,其中任一屬性發生了改變隨即執行callback。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

shell腳本調用C語言之字元串切分函數——strtok
一道C語言安全編碼題目
Asp.net MVC 如何對所有用戶輸入的字元串欄位做Trim處理
並行模式庫PPL應用實戰(一):使用task類創建並行任務

TAG:達人科技 |

您可能感興趣

Oracle開源GraphPipe:幾行代碼讓你在TensorFlow部署PyTorch模型
android 訪問webservice(解析一行代碼實現)
利用PHPstorm進行代碼review
5行代碼秀碾壓,比Keras還好用的fastai來了,嘗鮮PyTorch 1.0必備伴侶
如何使用Reviewboard進行代碼Review?
千行代碼搞定Transformer?這份高效PaddlePaddle官方實現請收下
想要千行代碼搞定Transformer?這份高效的PaddlePaddle官方實現請收下
GitHub發布GitHub Actions平台,可直接運行代碼
PyTorch代碼調試利器:自動print每行代碼的Tensor信息
將 30 萬行代碼從 Flow 遷移到 TypeScript 是一種怎樣的體驗?
Pandas on Ray:僅需改動一行代碼,即可讓Pandas加速四倍
Jeff Dean推薦:用TPU跑Julia程序,只需不到1000行代碼
資源 | Pandas on Ray:僅需改動一行代碼,即可讓Pandas加速四倍
漏洞交易公司Zerodium披露:NoScript漏洞允許在Tor中執行代碼
一行代碼切換TensorFlow與PyTorch,模型訓練也能用倆框架
劍指TensorFlow,PyTorch Hub官方模型庫一行代碼復現主流模型
一行代碼下載 Instagram 圖片
一行代碼自動調參,支持模型壓縮指定大小,Facebook升級FastText
PyTorch Hub:圖靈獎得主 Yann LeCun 強推!一行代碼輕鬆復現主流模型
textgenrnn:只需幾行代碼即可訓練文本生成網路