微信扫一扫打赏支持

VUE疑难问题---2、方法和计算属性的区别

VUE疑难问题---2、方法和计算属性的区别

一、总结

一句话总结:

VUE中的方法和计算属性可以实现同样的功能,区别就是计算属性有基于响应式依赖的缓存(也就是计算属性依赖的数据改变缓存才会改变),而方法没有,需要缓存的话就用计算属性。
<div id="app">
    <p>Original message: "{{ message }}"</p>
    <hr>
    <p>计算属性1: "{{ reversedMessage }}"</p>
    <p>计算属性2: "{{ reversedMessage }}"</p>
    <p>计算属性3: "{{ reversedMessage }}"</p>
    <hr>
    <p>方法1: "{{ reversedMessage2() }}"</p>
    <p>方法2: "{{ reversedMessage2() }}"</p>
    <p>方法3: "{{ reversedMessage2() }}"</p>
</div>
<script src="../js/vue.js"></script>
<script>
    let vm = new Vue({
        el: '#app',
        data: {
            message: '我有一只小毛驴,我永远也不骑'
        },
        computed: {
            // 计算属性的 getter
            reversedMessage: function () {
                // `this` 指向 vm 实例
                console.log('计算属性:reversedMessage');
                for (let i=1;i<=100000;i++){

                }
                return this.message.split('').reverse().join('')+''+Date.now();
            }
        },
        methods: {
            //用方法实现同样功能
            reversedMessage2: function () {
                console.log('方法:reversedMessage2');
                for (let i=1;i<=100000;i++){

                }
                return this.message.split('').reverse().join('')+''+Date.now();
            }
        }
    });
</script>

 

 

1、vue中计算属性为什么要有缓存?

假设我们有一个性能开销比较大的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于 A。如果没有缓存,我们将不可避免的多次执行 A 的 getter!

 

 

 

 

二、方法和计算属性的区别

博客对应课程的视频位置:

 

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>计算属性和方法的区别</title>
 6 </head>
 7 <body>
 8 <!--
 9 1、
10 计算属性和方法的区别
11 VUE中的方法和计算属性可以实现同样的功能,
12 区别就是计算属性有基于响应式依赖的缓存,而方法没有,
13 需要缓存的话就用计算属性。
14 
15 2、
16 vue中计算属性为什么要有缓存
17 假设我们有一个性能开销比较大的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于 A。如果没有缓存,我们将不可避免的多次执行 A 的 getter!
18 
19 
20 -->
21 <div id="app">
22     <p>Original message: "{{ message }}"</p>
23     <hr>
24     <p>计算属性1: "{{ reversedMessage }}"</p>
25     <p>计算属性2: "{{ reversedMessage }}"</p>
26     <p>计算属性3: "{{ reversedMessage }}"</p>
27     <hr>
28     <p>方法1: "{{ reversedMessage2() }}"</p>
29     <p>方法2: "{{ reversedMessage2() }}"</p>
30     <p>方法3: "{{ reversedMessage2() }}"</p>
31 </div>
32 <script src="../js/vue.js"></script>
33 <script>
34     let vm = new Vue({
35         el: '#app',
36         data: {
37             message: '我有一只小毛驴,我永远也不骑'
38         },
39         computed: {
40             // 计算属性的 getter
41             reversedMessage: function () {
42                 // `this` 指向 vm 实例
43                 console.log('计算属性:reversedMessage');
44                 for (let i=1;i<=100000;i++){
45 
46                 }
47                 return this.message.split('').reverse().join('')+''+Date.now();
48             }
49         },
50         methods: {
51             //用方法实现同样功能
52             reversedMessage2: function () {
53                 console.log('方法:reversedMessage2');
54                 for (let i=1;i<=100000;i++){
55 
56                 }
57                 return this.message.split('').reverse().join('')+''+Date.now();
58             }
59         }
60     });
61 </script>
62 </body>
63 </html>

 

 

 

 

 

 

 
posted @ 2020-04-20 08:01  范仁义  阅读(475)  评论(0)    收藏  举报