方法内外同名处理

element中,renderCell

外部可以传递renderCell方法,内部重写该方法,核心就是变量只是存储引用的值,重新赋值就是改了变量保存的地址,并不会删除或者失效之前指向的内容,只是改了当前指向而已,可以用中间变量存储之前的引用,否则将会遗失相关内容,vue中的render也有做类似的操作

  1. // 配置
  2. // template
  3. <template>
  4. <el-table-column :renderCell="renderCell">
  5. </el-table-column>
  6. </template>
  7. // js
  8. methods: {
  9. renderCell (h) {
  10. return (<span>外部renderCell</span>)
  11. }
  12. }
  13. // 内部处理
  14. let originRenderCell = column.renderCell; // originRenderCell暂存外部方法引用地址
  15. // renderCell引用修改指向新方法
  16. column.renderCell = function () {
  17. if (...) {
  18. const children = originRenderCell()
  19. }
  20. }

vue中的处理,需要把mount作为用户友好的api暴露出来,但是内部也需要这么友好的命名,且需要再次包装带有编译器的入口

  1. // 备份mount方法
  2. // 包装一层$mount方法
  3. const mount = Vue.prototype.$mount
  4. Vue.prototype.$mount = function (
  5. el?: string | Element,
  6. hydrating?: boolean
  7. ): Component {
  8. return mount.call(this, el, hydrating)
  9. }