最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js 實現(xiàn)watch監(jiān)聽數(shù)據(jù)變化的代碼

 更新時間:2019年10月13日 10:58:21   作者:曾經的水哥  
這篇文章主要介紹了js 實現(xiàn)watch監(jiān)聽數(shù)據(jù)變化的代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下

1.js

/**
 * @desc 屬性改變監(jiān)聽,屬性被set時出發(fā)watch的方法,類似vue的watch
 * @author Jason
 * @study https://www.jianshu.com/p/00502d10ea95
 * @data 2018-04-27
 * @constructor
 * @param {object} opts - 構造參數(shù). @default {data:{},watch:{}};
 * @argument {object} data - 要綁定的屬性
 * @argument {object} watch - 要監(jiān)聽的屬性的回調
 * watch @callback (newVal,oldVal) - 新值與舊值
 */
 
class watcher{
 constructor(opts){
  this.$data = this.getBaseType(opts.data) === 'Object' ? opts.data : {};
  this.$watch = this.getBaseType(opts.watch) === 'Object' ? opts.watch : {};
  for(let key in opts.data){
   this.setData(key)
  }
 }
 
 getBaseType(target) {
  const typeStr = Object.prototype.toString.apply(target);
  
  return typeStr.slice(8, -1);
 }
 
 setData(_key){
  Object.defineProperty(this,_key,{
   get: function () {
    return this.$data[_key];
   },
   set : function (val) {
    const oldVal = this.$data[_key];
    if(oldVal === val)return val;
    this.$data[_key] = val;
    this.$watch[_key] && typeof this.$watch[_key] === 'function' && (
     this.$watch[_key].call(this,val,oldVal)
    );
    return val;
   },
  });
 }
}
 
// export default watcher;

  2.html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>wathc</title>
</head>
<body>
 <script src="./watch.js"></script>
 <script>
  let wm = new watcher({
   data:{
    a: 0,
    b: 'hello'
   },
   watch:{
    a(newVal,oldVal){
     console.log(newVal, oldVal); // 111 0
    }
   }
  })
  wm.a = 111
 </script>
</body>
</html> 

 3. 給vm.a 從新賦值 就能看到 newVal 和oldVal的變化

總結

以上所述是小編給大家介紹的js 實現(xiàn)watch監(jiān)聽數(shù)據(jù)變化的代碼,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

相關文章

  • JavaScript中Object.values()的用法舉例

    JavaScript中Object.values()的用法舉例

    這篇文章主要給大家介紹了關于JavaScript中Object.values()的用法舉例,Object.values()是JavaScript中一個內置的靜態(tài)函數(shù),用于返回一個對象中所有屬性值的數(shù)組,需要的朋友可以參考下
    2023-09-09
  • canvas實現(xiàn)環(huán)形進度條效果

    canvas實現(xiàn)環(huán)形進度條效果

    本文主要介紹了canvas實現(xiàn)環(huán)形進度條效果的實例。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • JS實現(xiàn)碰撞檢測效果

    JS實現(xiàn)碰撞檢測效果

    這篇文章主要為大家詳細介紹了JS實現(xiàn)碰撞檢測效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • glsl_buffer實現(xiàn)漸變三角形方法詳解

    glsl_buffer實現(xiàn)漸變三角形方法詳解

    這篇文章主要為大家介紹了glsl_buffer實現(xiàn)漸變三角形方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • layui點擊數(shù)據(jù)表格添加或刪除一行的例子

    layui點擊數(shù)據(jù)表格添加或刪除一行的例子

    今天小編就為大家分享一篇layui點擊數(shù)據(jù)表格添加或刪除一行的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • Js模塊打包exports require import的用法和區(qū)別

    Js模塊打包exports require import的用法和區(qū)別

    這篇文章主要介紹了Js模塊打包exports require import的用法和區(qū)別,對模塊打包感興趣的同學,可以參考下
    2021-05-05
  • JavaScript強制類型轉換和隱式類型轉換操作示例

    JavaScript強制類型轉換和隱式類型轉換操作示例

    這篇文章主要介紹了JavaScript強制類型轉換和隱式類型轉換操作,結合實例形式分析了javascript字符串、數(shù)字等顯示類型轉換,以及運算、判斷等情況下的隱式類型轉換相關操作技巧,需要的朋友可以參考下
    2019-05-05
  • JavaScript中運算符規(guī)則和隱式類型轉換示例詳解

    JavaScript中運算符規(guī)則和隱式類型轉換示例詳解

    JavaScript中運算符規(guī)則的隱式類型轉換是什么? 這是每個學習Javascript的新手們都應該知道的一個問題,下面這篇文章主要給大家介紹了關于JavaScript中運算符規(guī)則和隱式類型轉換的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • 微信小程序實現(xiàn)聯(lián)動選擇器

    微信小程序實現(xiàn)聯(lián)動選擇器

    這篇文章主要為大家詳細介紹了微信小程序實現(xiàn)聯(lián)動選擇器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Grunt入門教程(自動任務運行器)

    Grunt入門教程(自動任務運行器)

    Grunt是一個自動任務運行器,會按照預先設定的順序自動運行一系列的任務。這可以簡化工作流程,減輕重復性工作帶來的負擔
    2015-08-08

最新評論

大渡口区| 安新县| 玉田县| 开平市| 石家庄市| 青阳县| 阿鲁科尔沁旗| 什邡市| 灵武市| 汕头市| 葫芦岛市| 稻城县| 玛曲县| 镇原县| 巢湖市| 曲周县| 张家口市| 苏尼特左旗| 清徐县| 仙游县| 灌南县| 梓潼县| 襄樊市| 酒泉市| 玉林市| 定边县| 凤台县| 通辽市| 柞水县| 方城县| 永善县| 合阳县| 自贡市| 连城县| 沁源县| 加查县| 东明县| 长葛市| 抚顺市| 岫岩| 大化|