请教关于HarmonyOS鸿蒙Next中this的指向性问题

请教关于HarmonyOS鸿蒙Next中this的指向性问题 我的项目里面,需要使用对控件截图生成图片,进行触发的时候,

如果是在Image的onClick事件里面使用:

this.getUIContext().getComponentSnapshot().createFromBuilder(()=>{this.RandomBuilder()},

是有效的 。

如果是在自定义的组件里面使用,

Column() {
  CommonHeader({
    startShare(){
      console.log('ssss开始分享'+this.getUIContext())
      // // 建议使用this.getUIContext().getComponentSnapshot().createFromBuilder()
      // this.getUIContext().getComponentSnapshot().createFromBuilder(()=>{this.RandomBuilder()},

此时就会报错。

请问在鸿蒙里面,this是如何指向的。


更多关于请教关于HarmonyOS鸿蒙Next中this的指向性问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

具体原因是,一个方法用了箭头函数,一个没用,导致this指向了不同的上下文,箭头函数是在定义的时候就确定了this指向,常规函数的话,是在运行的时候确定。具体this的指向内容可以参考链接

更多关于请教关于HarmonyOS鸿蒙Next中this的指向性问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


箭头函数还有这个隐藏的含义呀。

基本信息:

  • 箭头函数提供了一个更短的语法
  • 箭头函数可以捕获其所在上下文的this值,而不是自己定义自己的this值

优点:

  • 使得代码更加简洁
  • this的绑定不可改

你好。

因为直接使用componentSnapshot可能导致实例不明确的问题,所以建议使用getUIContext获取UIContext实例,并使用getComponentSnapshot获取绑定实例的componentSnapshot。

就是你举例的这种方式:

this.getUIContext().getComponentSnapshot().createFromBuilder(()=>{this.RandomBuilder()}, 

因为你的第二部分代码示例不全。初步推测是你的自定义组件回调的作用域有点问题。

在HarmonyOS鸿蒙Next中,this的指向性与JavaScript中的规则一致。在普通函数中,this指向调用该函数的对象;在箭头函数中,this继承自外层作用域。在类方法中,this指向当前实例。开发者需注意函数调用方式,避免this指向错误。

回到顶部