<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>el与data的两种写法</title>
        <!-- 引入Vue -->
        <script type="text/javascript" src="../js/vue.js"></script>
    </head>
    <body>
        <!-- 
            data与el的2种写法
                    1.el有2种写法
                                    (1).new Vue时候配置el属性。
                                    (2).先创建Vue实例,随后再通过vm.$mount('#root')指定el的值。
                    2.data有2种写法
                                    (1).对象式
                                    (2).函数式
                                    如何选择:目前哪种写法都可以,以后学习到组件时,data必须使用函数式,否则会报错。
                    3.一个重要的原则: ★★★
                                    由Vue管理的函数(例如:本例中的 data()),一定不要写箭头函数,一旦写了箭头函数,this就不再是Vue实例了。
        -->
        <!-- 准备好一个容器-->
        <div id="root">
            <h1>你好,</h1>
        </div>
    </body>

    <script type="text/javascript">
        Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

        //el 的两种写法: 用哪一种方法都可以。
        /*
        //第一种写法:
        const v = new Vue({
            //el:'#root', //el 的第一种写法: el 指定 容器.
            data:{
                name:'尚硅谷'
            }
        })
        console.log(v) //此处输出的是 Vue实例 其中:输出的对象列表中 $开头的是 Vue 为程序准备好的。

        v.$mount('#root') //el 的第二种写法: 通过 .$mount() 也可以指定容器.
        */

        //data 的两种写法: 推荐使用第二种写法(因为将来如果使用组件方式,那么必须使用 函数式)
        new Vue({
            el:'#root', 
            //data 的第一种写法:对象式
            /* data:{
                name:'尚硅谷'
            } */

            //data 的第二种写法:函数式 ★★★。 要求:必须返回一个对象。
            //data:function(){}  //∈普通函数写法.    注意: 这个function(){}函数不是data调用的,而是Vue调用的。
            //一般在对象中写方法,删掉function,删掉 : ,等同于下面的缩写结构:
            data(){
                console.log('@@@',this) //此处的this是Vue实例对象
                return{
                    name:'尚硅谷'
                }
            }
        })
    </script>
</html>

笔记

1. 在 Vue 中 $开头的对象或变量… 的含义

009_el与data的两种写法 - 图1

上图中:
输出的对象列表中 $开头的是 Vue 为 程序员 准备好的变量。
下面不带 $开头的 是为 Vue底层函数调用的,其中 proto 是Vue的原型对象(其中 $开头的可以被我们使用)

2. data 第二种写法不能写成data:=>function(){} 的原因

因为 data:=>function(){} 属于箭头函数写法 ,而箭头函数没有自己的this,所以会往外找到全局的Window对象。