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. 你会几种读取/加载 properties配置文件方法

    摘要:在java项目中经常会使用到配置文件,这里就介绍几种加载配置文件的方法. 本文分享自华为云社区<[Java]读取/加载 properties配置文件的几种方法>,作者:Copy工程师 ...

  2. 利用Appuploader上架IPA步骤

      Appuploader可以辅助在Windows.linux或mac系统直接申请iOS证书p12,及上传ipa到App Store.方便在没有苹果电脑情况下上架IPA操作. 一.下载安装iOS上架辅 ...

  3. 大数据-业务数据采集-FlinkCDC 读取 MySQL 数据存入 Kafka

    目录 作用 app 产生各层数据的 flink 任务 bean 数据对象 common 公共常量 utils 工具类 app.ods.FlinkCDC.java package com.atguigu ...

  4. 你正在调试XXX的发布版本,如果在启用 仅我的代码 的同时,使用通过编译器优化的发布版本

    仅我的代码"警告 你正在调试 XXX.dll 的发布版本.如果在启用"仅我的代码"的同时使用通过编译器优化的发布版本,调试体验会降级(例如,将不会命中断点) 停止调试禁用 ...

  5. Ubuntu 安装 MySQL 5.7

    一.安装MySQL 1. 删除Mysql 数据库 sudo apt autoremove --purge mysql-server-* sudo apt remove mysql-server sud ...

  6. SpringBoot Docker Skywalking agent 不生效

    SpringBoot Skywalking agent 通过 Dockfile 配置 不生效 ENTRYPOINT ["java","-Djava.security.eg ...

  7. WPF 水印装饰器

    使用AdornerDecorator装饰器实现WPF水印 水印装饰器WatermarkAdorner类代码: using System; using System.Collections.Generi ...

  8. 【转】OS | 从一道面试题谈 Linux 下 fork 的运行机制

    今天一位朋友去一个不错的外企面试 Linux 开发职位,面试官出了一个如下的题目: 给出如下C程序,在 Linux 下使用 gcc 编译: #include "stdio.h" # ...

  9. 基于Kubernetes的Serverless PaaS稳定性建设万字总结

    作者:许成铭(竞霄) 数字经济的今天,云计算俨然已经作为基础设施融入到人们的日常生活中,稳定性作为云产品的基本要求,研发人员的技术底线,其不仅仅是文档里承诺的几个九的 SLA 数字,更是与客户切身利益 ...

  10. oracle开机自动重启

    数据库服务器如果由于某种原因重启了,oracle数据库是不会重新启动的,那么如何配置可以完成操作系统重启数据库服务器自动重启. 注:如下样例根据我的实际oracle安装路径写的,使用时根据实际安装路径 ...