HarmonyOS 鸿蒙Next 【变量值不符合预期】按照以下Demo,打印出来的this.message为undefined
按照以下Demo,点击Bar的ThisButton时,打印出来的this.message为undefined. 可能对ts不太熟,按照我的理解this.message应该为’Hello World’,打印出来为undefined不太符合我的理解。 如果是我的代码的问题能指点下为什么是这个结果,以及如何得到我期望的结果吗? demo代码如下
@Entry
@Component
struct ThisPage {
@State message: string = 'Hello World';
build() {
Row() {
Column() {
Bar({ builder: this.BarBuilder })
Text(this.message).fontSize(50).fontWeight(FontWeight.Bold).layoutWeight(1)
}.width('100%')
}.height('100%')
}
@Builder
BarBuilder() {
OneButton({
onChange: () => {
console.log(`Message: ${this.message}`)
return false
}
})
}
}
@Component
struct Bar {
@BuilderParam builder?: () => void
build() {
Row() {
Text('This is a bar').height(44).width('100%').layoutWeight(1)
this.builder?.()
}.padding(16).backgroundColor(Color.Pink)
}
}
@Component
struct OneButton {
onChange?: () => boolean
build() {
Button('Button').onClick(() => {
this.onChange?.()
})
}
}
更多关于HarmonyOS 鸿蒙Next 【变量值不符合预期】按照以下Demo,打印出来的this.message为undefined的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next 【变量值不符合预期】按照以下Demo,打印出来的this.message为undefined的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,如果你遇到按照Demo运行后,打印出来的this.message
为undefined
的情况,通常是由于上下文(context)绑定问题或者变量作用域问题。
-
上下文绑定:检查
this
关键字的使用环境。在JavaScript风格的鸿蒙开发中(注意,这里不涉及Java或C语言),如果在一个回调函数中使用了this
,可能会因为函数被当作普通函数调用而导致this
指向全局对象(在严格模式下为undefined
)。可以使用箭头函数来自动绑定外层作用域的this
,或者使用.bind(this)
方法来手动绑定。 -
变量作用域:确保
message
变量在使用前已被正确定义和赋值。如果message
是在某个条件语句或函数内部定义的,那么它可能在外部不可见或未被正确初始化。 -
初始化检查:在打印
this.message
之前,检查this.message
是否已被赋予了一个非undefined
的值。
示例修正代码(假设使用的是类组件或类似结构):
class MyComponent {
constructor() {
this.message = "Hello, HarmonyOS!";
}
printMessage = () => {
console.log(this.message); // 应正确打印 "Hello, HarmonyOS!"
}
}
const myComp = new MyComponent();
myComp.printMessage();
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html