关于vue.extend 里的initComputed作用

来源:3-2 createComponent

Doctor_Rui

2020-11-18

老师您好, 在生成vue.extend的过程中,执行的一个方法initComputed, 看方法的作用是将options里面的computed的属性代理到组件的实例上,但是我发现在_init的过程中也触发了initState里面的initComputed方法执行,两个方法都将computed代理到了实例上,后来通过注释了vue.extend 里面的initComputed 发现并不影响代码的正常运行并且功能也没问题,所以想问问这段代码是还有其他作用么? 版本的2.6.11的

	function initState (vm) {
	  vm._watchers = [];
	  var opts = vm.$options;
	  if (opts.props) { initProps(vm, opts.props); }
	  if (opts.methods) { initMethods(vm, opts.methods); }
	  if (opts.data) {
	    initData(vm);
	  } else {
	    observe(vm._data = {}, true /* asRootData */);
	  }
	  if (opts.computed) {
		  // 这是Vue里面的 initComputed
	    initComputed(vm, opts.computed); 
	  }
	  if (opts.watch && opts.watch !== nativeWatch) {
	    initWatch(vm, opts.watch);
	  }
	}
if (Sub.options.computed) {
     initComputed$1(Sub);
  }
  //这是vue.extend里面的initComputed
function initComputed$1 (Comp) {
  var computed = Comp.options.computed;
  for (var key in computed) {
    defineComputed(Comp.prototype, key, computed[key]);
  }
}
写回答

1回答

ustbhuangyi

2020-11-19

//img1.sycdn.imooc.com/szimg/5fb5d1010993374122440836.jpg
其实这个注释已经说的很清楚了,在 extend 阶段做一次就可以避免在每个实例的初始化阶段做了。

2
10
ustbhuangyi
回复
Doctor_Rui
先加我微信 ustbhuangyi
2020-11-20
共10条回复

Vue.js 源码深入解析 深入理解Vue实现原理

全方位讲解 Vue.js 源码,进阶高级工程师

4984 学习 · 1037 问题

查看课程