watch的用法

本文详细介绍了Vue.js中Watch特性的多种使用场景,包括基本的响应式数据监听、对象内部属性的深度监听、数组变化的监测以及通过Computed属性进行数据计算的方法。通过实例演示了如何在不同情况下有效利用Watch特性,提升前端开发效率。

watch的几种用法:
一、最常用的

<script>
  export default {
    name: 'index',
    data() {
      return {
        demo: '',
        value: ''
      };
    },
    watch: {
      demo(val) {
        this.value = this.demo;
      }
    }
  };
</script>

二、对象里面的数据变化,需要借助computed来计算

<script>
  export default {
    name: 'index',
    data() {
      return {
        demo: {
          name: ''
        },
        value: ''
      };
    },
    computed: {
      newName() {
        return this.demo.name;
      }
    },
    watch: {
      newName(val) {
        this.value = val;
      }
    }
  };
</script>

三、数组的变化

<div id="app">
  <input type="text" v-model="childrens.name" />
  <input type="text" v-model="lastName" />
</div>

<script type="text/javascript">
  var vm = new Vue( {
    el: '#app',
    data: {
      childrens: {
        name: '小强',
        age: 20,
        sex: '男'
      },
      tdArray:["1","2"],
      lastName:"张三"
    },
    watch:{
      childrens:{
        handler:function(val,oldval){
          console.log(val.name)
        },
        deep:true//对象内部的属性监听,也叫深度监听
      },
      'childrens.name':function(val,oldval){
        console.log(val+"aaa")
      },//键路径必须加上引号
      lastName:function(val,oldval){
        console.log(this.lastName)
      }
    },//以V-model绑定数据时使用的数据变化监测
  } );
  vm.$watch("lastName",function(val,oldval){
    console.log(val)
  })//主动调用$watch方法来进行数据监测
</script>
</body>
<think>嗯,用户想了解JavaScript中watch方法的用法,并希望一个示例。首先,我需要确认JavaScript中是否有原生的watch方法。根据我的知识,标准的JavaScript(ECMAScript)并没有内置的watch方法。可能用户指的是某些库或框架中的方法,比如在Vue.js中有watch用于响应数据变化。或者可能用户混淆了其他语言中的watch概念,比如Object.watch(),这是一个非标准的方法,曾经在部分浏览器中实现过,但已被废弃。 需要先检查引用内容是否有相关线索。提供的引用中提到HTTPWatch使用JavaScript自动化,引用[2]提到“httpwatch使用_使用JavaScript的HTTPWatch自动化”,这可能指的是一个工具或库中的watch方法,但不确定是否是JavaScript原生。其他引用如[1]讨论子字符串方法,[3]关于TypeScript示例,[4]提到测试工具,可能不相关。 接下来,我应该解释原生的Object.watch(),虽然已废弃,但可能在旧代码中存在。同时,现代替代方案如Proxy对象。另外,如果用户指的是框架中的watch,比如Vue.js的监控机制,也需要提及,但需要明确区分原生和框架特有的方法。 需要提供示例代码,比如使用Object.watch()的示例,说明其用法和注意事项,同时指出已被废弃,推荐使用Proxy。此外,对于Vue.js的watch示例,可能需要简单说明,但用户的问题可能更关注原生JS,所以重点放在Proxy上。 还要确保回答结构清晰,分步骤说明,符合用户要求的系统级指令,如行内公式格式正确,但这个问题可能不涉及数学公式。需要检查是否有必要提及性能分析或其他相关问题,但用户直接询问的是用法和示例,所以相关问题可能围绕替代方案、兼容性或框架中的用法。 最后,生成相关问题,如替代方法、浏览器兼容性、框架中的watch用法等。</think>### JavaScript中watch方法的用法及示例 JavaScript原生的`watch()`方法曾是**非标准特性**,主要用于监控对象属性的变化,但已被废弃[^1]。现代开发推荐使用`Proxy`对象或框架(如Vue.js)的数据响应机制。以下是两种实现方式: --- #### 1. **已废弃的`Object.watch()`方法** 语法:`obj.watch(property, callback)` ```javascript let obj = { count: 0 }; obj.watch('count', (prop, oldVal, newVal) => { console.log(`属性 ${prop} 从 ${oldVal} 变为 ${newVal}`); return newVal; // 必须返回新值 }); obj.count = 1; // 控制台输出:"属性 count 从 0 变为 1" ``` ⚠️ **注意**:仅旧版Firefox支持此方法,其他浏览器可能报错[^2]。 --- #### 2. **现代替代方案:`Proxy`对象** `Proxy`可拦截对象操作,兼容性更好: ```javascript let target = { count: 0 }; let handler = { set: function(obj, prop, value) { console.log(`属性 ${prop} 从 ${obj[prop]} 变为 ${value}`); obj[prop] = value; return true; // 表示设置成功 } }; let proxyObj = new Proxy(target, handler); proxyObj.count = 1; // 控制台输出:"属性 count 从 0 变为 1" ``` --- #### 3. **框架中的watch机制(以Vue.js为例)** Vue通过`watch`选项监听数据变化: ```javascript new Vue({ data: { message: 'Hello' }, watch: { message(newVal, oldVal) { console.log(`message从${oldVal}变为${newVal}`); } } }); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端段

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值