一、Computed属性计算

四种计算处理的方式方法

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <!-- 计算属性 computed -->
<div id="v">
<!-- 变量凭借直接显示处理 -->
<h3>{{firstName}} {{lastName}}</h3> <!-- 第二种:在模板语法内运算处理 -->
<h3>{{firstName + " " + lastName}}</h3> <!-- 第三种:使用方法进行处理 -->
<h3>{{splicingStr()}}</h3> <!-- 第四种:使用方法的定义,声明在computed中,嵌入模板使作为变量使用 -->
<h3>{{splicingStr2}}</h3>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
const vm = new Vue({
el : '#v',
data : {
firstName : 'Dai',
lastName : 'Zeal4J'
},
methods : {
splicingStr : function () {
return this.firstName + ' ' + this.lastName;
},
},
computed : {
splicingStr2 : function () {
return this.firstName + ' ' + this.lastName;
}
}
});
</script> </body>
</html>

如果计算逻辑更为复杂,使用computed选项的处理:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <!-- 为了显示总价格,虽然可以在模板语法内进行计算,但不建议 -->
<div id="v">
<h3>价格合计 : {{getBookSum}}</h3>
<h3>价格合计 : {{getBookSumByForIn}}</h3>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
const v = new Vue({
el : '#v',
data : {
bookList : [
{ id : 1, name : 'Unix编程', price : 100 },
{ id : 2, name : '深入理解计算机原理', price : 100 },
{ id : 3, name : '现代操作系统', price : 100 },
{ id : 4, name : '代码大全', price : 100 }
]
},
computed : {
getBookSum : function () {
let sum = 0;
for (let i = 0; i < this.bookList.length; i++) {
sum += this.bookList[i].price;
}
return sum;
},
getBookSumByForIn : function () { // 使用ES6语法
let sum = 0;
for (let book of this.bookList) {
sum += book.price;
}
return sum;
}
} });
</script> </body>
</html>

setter&getter属性概述:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="../dependencies/vue.js"></script>
</head>
<body> <div id="v">
</div> <script type="text/javascript">
const v = new Vue({
el : '#v',
data : {
firstName : 'nico',
lastName : 'jacob'
},
computed : {
fullName : {
set : function (newVal) { // 如果要设置就需要传入形参中处理
// 因为一般不怎么作用于修改属性值,set用不上 -> 不写了
},
get : function () {
// 处理计算的逻辑都放在这个里面,所以省略开始直接对象名称衔接方法处理
return 0;
}
}
}
});
</script>
<!--
computed 和 method的区别在于?
computed具备缓存特性,多次重复性调用将会触发缓存
method则不具备,方法调用一次就重新赋值一次
如果是重复性的频率高的获取,可以使用computed更好,减少内存消耗
--> </body>
</html>

computed & methods的区别?

methods不具备缓存功能

/* 计算属性,用于处理一些属性合计或者需要计算得到的结果值 */
/* 这里虽然是一个方法,但是使用上看是作为一个属性进行操作 */
/* 要注意一个问题,data中的属性的值发生变化,那么将会重新调用computed内的函数,,并渲染 */
/* 当computed内部的函数被调用两次以上的情况,如果里面涉及的属性值没有发生改变,则使用缓存的值进行渲染 */

演示案例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <div id="v">
<h3>{{getFullName()}}</h3>
<h3>{{getFullName()}}</h3>
<h3>{{getFullName()}}</h3>
<hr>
<h3>{{getFullNameByCompute}}</h3>
<h3>{{getFullNameByCompute}}</h3>
<h3>{{getFullNameByCompute}}</h3>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
const v = new Vue({
el : '#v',
data : {
firstName : 'kobe',
lastName : 'bryant'
},
methods : {
getFullName() {
let fullName = this.firstName + this.lastName;
console.log('methods -> ' + fullName);
return fullName;
}
},
computed : {
getFullNameByCompute() {
let fullName = this.firstName + this.lastName;
console.log('computed -> ' + fullName);
return fullName;
}
}
});
</script> </body>
</html>

二、ES6相关

1、块级作用域,Let变量关键字和Var变量关键字

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <button>按钮01</button>
<button>按钮02</button>
<button>按钮03</button>
<button>按钮04</button>
<button>按钮05</button> <script type="text/javascript"> // 代码块内的作用域问题
{
var a = 100;
let b = 200;
console.log("in codeBlock var a -> " + a);
console.log("in codeBlock let b -> " + b);
}
console.log("out codeBlock var a -> " + a);
// console.log("out codeBlock let b -> " + b); // 出作用域 let修饰的变量将会报错无法获取 // --------------------------------------------------------------------------------------------------------- // 函数问题
var fun;
if (true) {
var txt = '打印的内容';
fun = function () {
console.log(txt);
}
} // 在调用的时候 txt变量可能被改变
txt = '更改的内容';
fun(); // --------------------------------------------------------------------------------------------------------- // for中的块级作用域问题
var buttons = document.getElementsByTagName('button');
// for (var i = 0; i < buttons.length; i++) {
// buttons[i].addEventListener('click', function () {
// console.log(('第' + i + '个按钮被点击')); // 第5个按钮被点击 无论点击哪一个按钮都是显示第五个按钮被点击
// });
// } // 使用闭包解决问题
for (var i = 0; i < buttons.length; i++) {
(function (ii) { // 这一行的i只是一个形参,和外部的ib
buttons[ii].addEventListener('click', function () {
console.log(('第' + (ii + 1) + '个按钮被点击'));
});
})(i);
}
// 为什么闭包能够解决上述的问题?因为函数具有作用域的功能 // 使用let则不会存在这个问题
for (let i = 0; i < buttons.length; i++) {
buttons[i].addEventListener('click', function () {
console.log(('第' + (i + 1) + '个按钮被点击'));
});
}
// ---------------------------------------------------------------------------------------------------------
</script> </body>
</html>

2、Const常量定义关键字

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <script type="text/javascript">
// const 常量修饰
// 声明变量时优先使用const定义,如果变量需要被改变赋值再使用let进行修饰 // 1、const声明的常量不允许二次赋值
const val = 100;
// val = 200; × // 2、const声明的常量不允许不赋值
// const val2; × 声明即必须赋值 // 3、如果 const常量指向的是一个对象,则不可以改变对象的指向,但是对象的属性可以被更改
const obj = {
name : 'objectA',
};
// obj = {}; × 不允许重新赋值一个新对象
obj.name = 'ooo'; // 属性允许重新赋值
</script> </body>
</html>

3、对象字面量和函数的增强:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- 对象字面量增强 -->
<script>
/* 常规JS创建对象写法 */
const obj = new Object(); /* 字面量JS创建对象写法 */
const literalObj = {}; /* ES5属性赋值写法 */
const p1 = {
key1 : 100,
key2 : 'aaa',
key3 : true
} /* ES6支持外部变量同名赋值 */
const key4 = 50;
const key5 = 'bbb';
const key6 = false; const p2 = {
key4,
key5,
key6
}
console.log(p2); /* ES5的方法声明 */
const m1 = {
set : function (val1, val2) { },
get : function () {
return 100;
}
}
/* ES6支持方法声明的增强 */
const m2 = {
set(val1, val2) { },
get() {
return 100;
}
}
</script>
</body>
</html>

4、对JS对象的比较判断处理方法:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script type="text/javascript"> /* JS对象不能像后端编程语言一样,使用地址值进行判断是否为同一个对象 */
const getObject = function() {
return {
name : 'aaa',
age : 22,
gender : true
}
} /* 这里使用函数获取三个对象 */
const obj1 = getObject();
const obj2 = getObject();
const obj3 = getObject(); /* 如果三者都为同一个对象,则对obj1修改属性,其23都将改变,反之三者不是同一个对象 */
obj1.age = 33; /* 打印结果 */
console.log(obj1);
console.log(obj2);
console.log(obj3); /* 如果是这样返回的对象,就是返回一个地址,三者都为同一个对象 */
const finalObject = {
name : 'bbb',
age : 44,
gender : false
}
const getObject2 = function() {
return finalObject;
}
const obj4 = getObject2();
const obj5 = getObject2();
const obj6 = getObject2();
obj4.age = 88;
console.log(obj4);
console.log(obj5);
console.log(obj6);
</script>
</body>
</html>

【Vue】Re03 computed属性计算和ES6的一些补充的更多相关文章

  1. vue的computed属性

    vue的computed属性要注意的两个地方,1,必须有return,2,使用属性不用括号 <div> <input type="text" v-model=&q ...

  2. vue 的 computed 属性在什么时间执行

    vue 的 computed 属性在什么时间执行

  3. vue中computed(计算属性)和watch在实现父子组件props同步时的实际区分

    vue中computed和watch的对比是一个很有意思的话题. 看过官网教程以后,我们往往更倾向多使用computed.computed优点很多,却在某些时候不太适用. 今天我们就稍微讨论一下,当我 ...

  4. sau交流学习社区—vue总结:使用vue的computed属性实现监控变量变化,使用vue的watch属性监控变量变化从而实现其他业务

    有时候遇到这么个需求,输入框为空的时候,请求一遍接口,如果输入框不为空的时候,需要点击搜索按钮请求接口. 同步sau交流学习社区:https://www.mwcxs.top/page/464.html ...

  5. vue之computed(计算属性)

    所谓计算属性就是计算data里的数据属性. computed:实时监听的该功能. 即监听是否有修改(浏览器未打开时即开始监听了),监听的值有修改则添加 所监听的data数据属性变化了,自动实时修改. ...

  6. vue的computed属性的理解

    computed: { selectedQuestions() { let selectedQuestions = this.editedItem.questions; return this.que ...

  7. Vue中computed分析

    Vue中computed分析 在Vue中computed是计算属性,其会根据所依赖的数据动态显示新的计算结果,虽然使用{{}}模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的,在模板中放入太 ...

  8. vue中computed的作用以及用法

    在vue中computed是计算属性,主要作用是把数据存储到内存中,减少不必要的请求,还可以利用computed给子组件的data赋值. 参考地址:https://www.jianshu.com/p/ ...

  9. Vue.js学习 Item5 -- 计算属性computed与$watch

    在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护.这就是为什么 Vue.js 将绑定表达式限制为一个表达式.如果需 ...

  10. vue中的computed(计算属性)和watch(监听属性)的特点,以及深度监听

    //计算属性是根据data中已有的属性,计算得到一个新的属性, <div>全名:{{fullName}}</div> 创建计算属性通过computed关键字,它是一个对象 计算 ...

随机推荐

  1. 可观测性平台夜莺开源项目发布V6正式版!

    夜莺开源项目在2023.7月底发布了V6版本,这个版本开始,项目目标不止于做一款开源监控系统,而是要做一款开源可观测性平台,不过路漫漫其修远兮,初期只是把日志数据源引入并完成了基本的可视化,后续会着力 ...

  2. Bind DNS服务——带KEY的区域传送与子域授权

    Linux基础服务--Bind DNS服务 Part3 带KEY的区域传送与子域授权 带KEY的区域传送 上文提到了区域传送,但实际上在区域传送的时,传送的区域文件并不会被加密.因此一般的区域传送并不 ...

  3. 认真学习CSS3-问题收集-102号-关于定位

    css中有关于定位的一个属性position. 在w3cschool中,position的介绍如下: 值 描述 absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定 ...

  4. 基于cifar数据集合成含开集、闭集噪声的数据集

    前言 噪声标签学习下的一个任务是:训练集上存在开集噪声和闭集噪声:然后在测试集上对闭集样本进行分类. 训练集中被加入的开集样本,会被均匀得打上闭集样本的标签充当开集噪声:而闭集噪声的设置与一般的噪声标 ...

  5. 韦东山freeRTOS系列教程之【第五章】队列(queue)

    目录 系列教程总目录 概述 5.1 队列的特性 5.1.1 常规操作 5.1.2 传输数据的两种方法 5.1.3 队列的阻塞访问 5.2 队列函数 5.2.1 创建 5.2.2 复位 5.2.3 删除 ...

  6. matlab常用语法简介

    目录 一.输入函数 1.disp函数 二.合并字符串 1.strcat函数 (1)strcat函数可用于合并字符串,用法如图: 2.利用向量,用法如图: 3.利用"num2str" ...

  7. Nunjucks

    Nunjucks是什么东东?其实它是一个模板引擎. 那什么是模板引擎? 模板引擎就是基于模板配合数据构造出字符串输出的一个组件.比如下面的函数就是一个模板引擎: function examResult ...

  8. OffscreenCanvas-离屏canvas使用说明

    OffscreenCanvas 是一个实验中的新特性,主要用于提升 Canvas 2D/3D 绘图的渲染性能和使用体验.OffscreenCanvas 的 API 很简单,但是要真正掌握好如何使用. ...

  9. django 信号判断是新增、修改还是删除

    在Django的信号处理器中,你可以使用一些方法来确定信号是关于新增(create).修改(update)还是删除(delete)的.这通常涉及到检查 created 和 instance 参数的值. ...

  10. Java 网络编程(TCP编程 和 UDP编程)

    1. Java 网络编程(TCP编程 和 UDP编程) @ 目录 1. Java 网络编程(TCP编程 和 UDP编程) 2. 网络编程的概念 3. IP 地址 3.1 IP地址相关的:域名与DNS ...