Javascript 在WinJS中传递实例类

Javascript 在WinJS中传递实例类,javascript,windows-store-apps,winjs,Javascript,Windows Store Apps,Winjs,我试图传递一个类实例,以便能够持久化它的成员变量。我有以下代码 var mainNamespace = WinJS.Namespace.define("MainNamespace", { setupClass: WinJS.Class.define( function () { }, { createSetup: function CreateSetup() {

我试图传递一个类实例,以便能够持久化它的成员变量。我有以下代码

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);
        }        
       ...        
绘图屏幕的名称如下所示:

WinJS.Namespace.define("drawScreen", {
    DrawScreen: WinJS.Class.define(
    function DrawScreen(interaction) {
        /// Do some screen set-up here

        canvas.addEventListener("MSPointerUp", interaction.handleTouch, false);
    }
)


});
我的问题是,
交互。clickedPos
从未改变。为什么它没有改变,我这样做对javascript应用程序来说是正确的吗

编辑:


我现在已经弄清楚了为什么会发生这种情况,但没有弄清楚如何解决它。当
interaction.handleTouch
触发时,
指的是
canvas
对象,而不是
interaction
对象-因此我无法访问其成员。

问题出在以下几行:

canvas.addEventListener(“MSPointerUp”,interaction.handleTouch,false)

在这里,您将传递对函数handleTouch()的引用,而不与当前实例(交互)建立任何连接。可以使用.bind()方法更改事件处理程序的上下文:


canvas.addEventListener(“MSPointerUp”,interaction.handleTouch.bind(interaction),false)

不确定粘贴是否正确,但上面的代码看起来不正确(对我来说),是否缺少逗号?还有,这个交互定义在哪里?你是说这个吗,互动?(注意这个案例)我想我现在已经纠正了这一点——因为我用单独的方式发布了这些类,而逗号肯定被遗漏了。是的,上面定义了交互类。您在哪里将事件处理程序连接到interaction.handleTouch方法?抱歉-再次更新以显示thisDrop在DrawScreen内的断点,以确保命中。其次,在handleTouch内部设置一个断点-它会被击中吗?语法乍一看似乎还可以,不过如果您可以通过html示例复制所有代码,在DrawScreen中完成设置,等等(两者都缺少项目)虽然先尝试断点,但测试会更容易。你是说传递
交互.handleTouch
独立于函数所在的类传递函数吗?没错。它只是将引用传递给函数本身,它所在的类并不重要。