0

我正在尝试传递一个类实例,以便我可以保留它的成员变量。我有以下代码

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命名空间如下:

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对象 - 所以我无法访问它的成员。

4

1 回答 1

1

问题出在以下行:

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

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

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

于 2013-03-05T15:31:53.363 回答