初始代码:
<body>
<script src="../js/vue.js"></script>
<div id="app"></div>
<script>
const school = Vue.extend({
template:`
<div>
</div>
`,
data()
return {}
}
})
</script>
</body>
说明: 用Vue.extend()生成school对象就是VueComponent(Vue组件)的实例对象
从下面的调试信息我们可以知道:
console.log(school.__proto__ === Vue.__proto__); //true
console.log(school.prototype.__proto__ === Vue.prototype); //true
(1)school和Vue都是一个构造函数
(2)shcool的prototype是在Vue的prototype的基础上增加了某些内容
底层操作可理解为:
-
创建一个新对象,并赋予某些属性;再合并Vue.prototype对象(对象的合并为浅拷贝)
-
赋值操作:shcool.prototype = 上面创建的新对象
进一步调试说明1:
Vue.prototype.x = 99
console.log(school.prototype.x); //99
school.prototype.__proto__.x = 100
console.log(Vue.prototype.x); //100
以上代码可以看出两者为浅拷贝关系。
进一步调试说明2:
console.log(school.prototype === Vue.prototype); //false
说明两个对象实际有差别。
背景知识点补充:
引用自哔哩哔哩网站中《尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通》的P57:
关于VueComponent:
1.school组件本质是一个名为VueComponent的构造函数,且不是程序员定义的,是Vue.extend生成的。
2.我们只需要写或,Vue解析时会帮我们创建school组件的实例对象, 即Vue帮我们执行的:new VueComponent(options)。
3.特别注意:每次调用Vue.extend,返回的都是一个全新的VueComponent!!!!