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:只需幾行代碼即可訓練文本生成網路