computed 传参

<template>
<div>
<p>computed传参的写法:{{ who1Params('--我是传参的内容') }}</p>
</div>
</template> <script>
export default {
name: 'App',
data() {
return {
firstName: '张先生',
}
},
computed: {
who1Params() {
return function (Ba) {
console.log('输出的内容是:', Ba) //输出的内容是:
return this.firstName + Ba
}
},
}
}
</script>

我对computed源码的理解

初始化 computed的时候会调用 initComputed 函数。
然后注册一个 watcher 实例,实例化一个 Dep 消息订阅器,用作后续收集依赖。
调用计算属性时会触发Object.defineProperty的get(访问器)函数。 调用 depend 方法向自身的消息订阅器 dep的subs 中添加watcher。 当某个属性发生变化,触发 set 函数。
然后调用自身的消息订阅器 dep 的 notify 方法。
遍历当前 dep 中保存着所有订阅者(wathcer) 的 subs 数组。
并逐个调用 watcher 的 update 方法,完成响应更新。

我们观察 Watcher 和 Dep 的关系

watcher 中实例化了 dep 并向 dep.subs 中添加了订阅者.
dep 通过 notify 遍历了 dep.subs 通知每个 watcher 更新

Vue 响应系统其核心有三点:observe、watcher、dep

observe:遍历 data 中的属性,使用 Object.defineProperty 的 get/set 方法对其进行数据劫持;
dep:每个属性拥有自己的消息订阅器 dep,用于存放所有订阅了该属性的观察者对象;
watcher:观察者(对象),通过 dep 实现对响应属性的监听,监听到结果后,主动触发自己的回调进行响应。

computed 和 watch 的差异:

从使用场景上说,computed 适用一个数据被多个数据影响,
而 watch 适用一个数据影响多个数据;

computed 的注意点

computed计算属性是基于它们的响应式依赖进行缓存的。
只在相关响应式依赖发生改变时它们才会重新求值。
注意:如果某个依赖 (比如非响应式属性) 在该实例范畴之外,
则计算属性是不会被更新的。

我对computed的理解-以及computed的传参的更多相关文章

  1. vue中计算属性computed方法内传参

    vue中computed计算属性无法直接进行传参 如果有传参数的需求比如说做数据筛选功能可以使用闭包函数(也叫匿名函数)实现 例如: 在上篇博客vue安装使用最后的成绩表练习中的过滤功能的实现: &l ...

  2. 浅谈对java中传参问题的理解

    之前用的c/c++比较多,在c/c++中对于传参类型,无外乎就是传值.传引用.传指针这几种.但在java中,由于没有指针类型,其传参的方式也发生了相应的变化.在网上找了找,按我之前的理解,java中传 ...

  3. python3 函数传参练习 全局变量与局部变量 的理解

    额 还是继续抄一边NLP第二条: 2.一个人不能控制另外一个人   一个人不能改变另外一个人,一个人只能改变自己. 每个人的信念,价值观,规条系统只对本人有效,不应强求别人接守. 改变自己,别人才会有 ...

  4. 深入理解PHP传参原理(PHP5.2)

    首先说下今天想到的一个问题.在编写php扩展的时候,似乎参数(即传给zend_parse_parameters的变量)是不需要free的.举例: PHP_FUNCTION(test) { char* ...

  5. 以Integer类型传参值不变来理解Java值传参

    最近在写代码的时候出了一个错误,由于对值引用理解的不深,将Integer传入方法中修改,以为传入后直接修改Integer中的值就不用写返回值接收了,虽然很快发现了问题,但还是来总结一下 首先是代码: ...

  6. 深入理解 JavaScript中的变量、值、传参

    1. demo 如果你对下面的代码没有任何疑问就能自信的回答出输出的内容,那么本篇文章就不值得你浪费时间了. var var1 = 1 var var2 = true var var3 = [1,2, ...

  7. HTTP协议GET方法传参最大长度理解误区

    结论 HTTP 协议未规定GET和POST的长度 GET的最大长度是因为浏览器和WEB服务器显示了URI的长度 不同浏览器和WEB服务器,限制的最大长度不同 若要支持IE,则最大长度为2083 byt ...

  8. 【C/C++】指针,传参,引用的一些个人理解。

    (以下均为个人理解) 函数访问的传参两种方式大致为: 值传递: 地址传递. 但是实际上可以都理解为,传进来的[形参]是主函数里的实参值的[一种复制]. 举个例子,哪怕我们将地址作为子函数的输入变量,形 ...

  9. vue 生命周期钩子的理解 watch computed

    一  理解vue的生命周期,首先需要注意几个关键字 1. el :选择器 2. $el:对应选择器的template模板(html代码) 3. render:也是vue实例中的一项,其参数更接近vue ...

  10. 深入理解 Vue Computed 计算属性

    Computed 计算属性是 Vue 中常用的一个功能,我们今天来说一下他的执行过长 拿官网简单的例子来看一下: <div id="example"> <p> ...

随机推荐

  1. 带你读AI论文丨用于细粒度分类的Transformer结构—TransFG

    摘要:本文解读了<TransFG: A Transformer Architecture for Fine-grained Recognition>,该论文针对细粒度分类任务,提出了对应的 ...

  2. 火山引擎A/B测试:MAB智能调优实验,企业活动效果提升新利器

      618临近,各大电商APP的预热活动已然拉开序幕.对企业而言,一场活动从策划到上线,中间经过效果验证,其业务成本很高.一个好的活动创意从策划.开发.到最终发布,至少会经历几周实践,如果中间还经历A ...

  3. Axure 弹出框遮罩层灯箱效果

    灯箱效果:比较适合Web, 效果不太理想,还是自己做个比较合适 弹出效果:就是弹框 推动效果:A 元件显示的时候,把 B元件往下.右移动.如Web左侧菜二级单效果

  4. 跟着老猫来搞GO,系好安全带,准备发车!

    为什么想要开篇这么一个系列博客主题? 我想有很多小伙伴想要问我这个,其实主要有以下几个原因. 在粉丝面前丢脸了 之前写过几篇关于java分布式系统的一些坑,然后就有小伙伴挺崇拜的,认为老猫啥都会,甚至 ...

  5. VMware15.5安装Ubuntu20.04

    一.安装前的准备 1.下载好Ubuntu20.04的镜像文件,直接从官网下载就好,激活密匙. 2.准备好VMware软件,这里就忽略安装过程了. 二.建立虚拟机以及开启正式的Ubuntu安装过程 参考 ...

  6. Gosper's Hack (生成 n元集合所有 k 元子集

    Gosper's Hack是一种生成 n元集合所有 k元子集的算法,它巧妙地利用了位运算 void GospersHack(int k, int n) { int cur = (1 << ...

  7. 【营】在开局,提升【豹】发力 - vivo活动插件管理平台

    一.背景 随着vivo悟空活动中台活动组件越来越多,活动中台开发的小伙伴们愈发的感知到我们缺少一个可以沉淀通用能力,提升代码复用性的组件库.在这个目标基础之上诞生了acitivity-componen ...

  8. echart相关

    https://www.bilibili.com/video/BV1bh41197p8?p=21&spm_id_from=pageDriver

  9. uniapp H5扫码解决方案

    JS通过webView调用本地相机扫码二维码,然后webView把二维码数据传给JS 网上找了一堆资料,都是JS传值给webView的,这里自己看了下代码,通过两个步骤实现此功能1,通过JS调用web ...

  10. java进阶(25)--泛型

    一.泛型基本概念 JDK5.0后新特性:Generic 1.不使用泛型举例