采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,您好,看了这章有点小疑问,百思不得其解,controller那个装饰器,为啥symbolPrefix属性要放在原型上,为什么要添加在原型上,而切从头到尾都没看到movieController的实例化,只有Route类的实例化,难道Route实例化后,movieController也会跟着实例化么,为啥就可以用了
symbolPrefix 只是一个路径的前缀,可以看做是以它为分隔的路径命名空间,它的作用,就是为了拼接出来 koa-router 所需要第一个匹配路由方法的路径: routerPath = prefixPath + conf.path
不需要实例化,能让 koa-router 认识这个 routerPath 就行了,这个 movieController 所在的文件被 require 进来的时候,也就是 target 的原型上就配置了作为命名空间的路径,而在接下来的执行中,movieController 里面的每一个方法,被作为路由中间件执行的时候,都会去拼接完整的路径地址。
symbolPrefix是前缀我能理解,关于这个实例化是不是require进来之后就被实例化了 呢?我这边是这么理解的,引入movieController这个模块,会执行了这个模块的所有调用的装饰器,类的所有方法和属性不都是在实例化之后才被激活的么
你是卡在 “装饰器加工后的类,这个类(movieController)必须被实例化才能用” 这个认知上了,在整个 router 初始化的前前后后,并没有发生类实例化的事情,因为不需要它实例化,照样可以去读取它的原型链、属性、方法,我们所需要的,仅仅是借助于对类和类方法的装饰,来帮助我们生成一个(可以拼接完整路径)描述路由-控制器-中间件 映射的 routerMap,借助于类原型的能力,但并不需要对它实例化
大概明白了,存在在原型上的属性,不需要实例化就可以访问,老师真是一言点醒梦中人呀,豁然开朗
controller装饰器传入的target为Constructor,
controller里面方法的装饰器传入的target为Constructor.prototype,
只有放在Constructor.prototype上的属性,在方法的装饰器上才能访问
登录后可查看更多问答,登录/注册
Koa2+MongoDB+Parcel+Puppeteer+AntDesign快速搭建预告片网站
1.1k 7
1.2k 7
947 6
777 6
871 6