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
独立于函数所在的类传递函数吗?没错。它只是将引用传递给函数本身,它所在的类并不重要。