关于vue中this的指向问题?

methods:{
    backRenderer(instance, td, row, col, prop, value, cellProperties, t) {
        // 如何让此处的this指向函数的掉者,也就是下文中的cells,而不是指向vue
      console.log(this);
      Handsontable.renderers.TextRenderer.apply(this, arguments);
     
    },
    //在mounted中调用init方法
    initH(){
    // new一个对象
     this.hot = new Handsontable(dom, defSettging)
        let defSettging={
             cells: function (row, col, prop) {
             // this 指的是cells
              this.renderer = _this.backRenderer();
            }
        }
    }
    
    // methods中定义的方法若干
}
阅读 4.3k
6 个回答

在initH()中return defSettging,cells中return this;backRenderer中var that =this.initH().cells(); Handsontable.renderers.TextRenderer.apply(that, arguments);

clipboard.png

let that = this.initH();

bind试试

methods的方法this都是指向Vue的实例的,你可以在backRenderer用this.backRenderer指向自身。
如何让this指向backRenderer我尝试了一下,没有实现,希望有其他人可以做出解答。

Vue作了如下处理,所以bind这种绑定不能生效

function boundFn(a) {
    var l = arguments.length;
    return l
      ? l > 1
        ? fn.apply(ctx, arguments)
        : fn.call(ctx, a)
      : fn.call(ctx)
  }

假如确定initH先运行
可以this.defSettging ={}
然后 Handsontable.renderers.TextRenderer.apply(this.defSettging, arguments);

如果这个 backRenderer 函数不是为vue实例所用的,你可以不用放在vue里面。
把这个方法写在定义vue对象的外面,这样就可以直接写 this.renderer = backRenderer

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题