gpt4 book ai didi

javascript - 变量访问原型(prototype)

转载 作者:行者123 更新时间:2023-11-30 13:42:59 25 4
gpt4 key购买 nike

我正在开发新的 Palm Pre WebOS,Palm Pre 的应用程序是在 MojoSDK 中开发的,MojoSDK 是在 Prototype Javascript Framework 之上开发的。

我正在尝试访问事件处理程序中在助理级别定义的变量,这些事件处理程序也是同一助理的一部分。当我访问事件处理程序中的辅助级别变量时,我将其视为未定义。但是,可以在设置函数中访问变量。

作为引用,请看下面的代码:

代码:

function MyTestAssistant(passedValue)
{
this.passedValue = passedValue;
}

MyTestAssistant.prototype.setup = function()
{
Mojo.Log.info("Passed Value Is: " + this.passedValue); // Prints the value set in Constructor
}

MyTestAssistant.prototype.testListTapHandler = function(event)
{
Mojo.Log.info("Passed Value Is: " + this.passedValue); // Logs undefined
}

我在这里这样称呼:

Mojo.Event.listen(this.myTestList, Mojo.Event.listTap, this.testListTapHandler); 

还有其他人遇到这个问题还是我做错了什么?是否可以访问处理程序中的变量,或者我们是否可以考虑实现它的变通方法?

最佳答案

我不熟悉 mojo-sdk,但这听起来很像您在设置事件处理程序时混淆了“this”引用。很可能,当调用 testListTapHandler 时,this 引用触发事件的对象。

原型(prototype)有非常方便的 bind()方法来帮助消除这种混淆。

我猜你有这样的事情

elem.observe('eventname', myTestAssistant.testListTapHandler);

问题是,当事件被触发时,在 testListTapHandler 内部,this 将引用 elem。为了纠正这个问题,我们将事件处理程序与所需的对象绑定(bind):

elem.observe('eventname', myTestAssistant.testListTapHandler.bind(myTestAssistant));

关于javascript - 变量访问原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1237143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com