为什么 Vue2 this 能够直接获取到 data 和 methods ?

131 阅读1分钟

1.前言

2.搭建环境

本地新建index.html 如下:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    <div id="app">{{ message }}</div>
    <script>
        debugger
        const vm = new Vue({
            el: "#app",
            data: {
                message: "Hello Vue!",
            },
            methods: {
                sayName(){
                    console.log(this.name);
                }
            }
        })
        console.log(vm.message)
    </script>
</body>
</html>

3.开始在浏览器调试

image.png F11进入构造函数 如下: image.png 继续,单步进入_init()方法中 image.png 该函数有很多初始化操作,是否通过组件家族等等,我们直接找到initState()

image.png 以下为该函数

image.png 继续进入到initMethods 里边

image.png

image.png

image.png 通过bind指向Vue实例对象,在右侧我们也是可以看到 同样 我们进入initData()

image.png

image.png

image.png 这里主要是使用Object.defineProperty()进行拦截监听, this.xxx 则是访问的 this._data.xxx