我正在尝试传递类实例,以便我可以保留其成员变量。我有以下代码
var mainNamespace = WinJS.Namespace.define("MainNamespace", {
setupClass: WinJS.Class.define(
function () { },
{
createSetup: function CreateSetup() {
var interactionInst = new mainNamespace.interaction();
drawScreen.DrawScreen(interactionInst);
var backgroundProc = new
mainNamespace.createProc(interactionInst);
}
),
interaction: WinJS.Class.define(
function() {},
{
clickedPos: 0,
handleTouch: function handleTouch(event) {
this.clickedPos = event.x;
console.log("New pos: " + this.clickedPos);
}
),
createProc: WinJS.Class.define(
function (interaction) {
setInterval(this.runProc, 1000, interaction);
},
{
runProc: function runNewProc(interaction) {
console.log(interaction.clickedPos);
}
...
drawScreen
namepsace如下:
WinJS.Namespace.define("drawScreen", {
DrawScreen: WinJS.Class.define(
function DrawScreen(interaction) {
/// Do some screen set-up here
canvas.addEventListener("MSPointerUp", interaction.handleTouch, false);
}
)
});
我遇到的问题是interaction.clickedPos
永远不会改变。为什么它没有改变,我是否正确地使用这个javascript应用程序?
编辑:
我现在已经解决了为什么会发生这种情况,但不知道如何修复它。当interaction.handleTouch
触发时,this
引用canvas
对象,而不引用interaction
对象 - 因此我无法访问其成员。
答案 0 :(得分:1)
问题出在以下几行:
canvas.addEventListener("MSPointerUp", interaction.handleTouch, false);
这里传递对函数handleTouch()的引用,而不与当前实例(交互)建立任何连接。您可以使用.bind()方法更改事件处理程序的上下文:
canvas.addEventListener("MSPointerUp", interaction.handleTouch.bind(interaction), false);