Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeError:game_1.flip不是一个函数_Javascript_Oop_Firefox - Fatal编程技术网

Javascript TypeError:game_1.flip不是一个函数

Javascript TypeError:game_1.flip不是一个函数,javascript,oop,firefox,Javascript,Oop,Firefox,我正在尝试制作一个简单的注意力集中游戏的OOP版本。每样东西看起来都很好,即游戏板和卡在游戏的每个实例中都会出现,但卡不会翻转 我正在尝试使用Firefox Web Developer进行调试,收到以下错误消息: TypeError:game_1.flip不是一个函数 我一辈子都搞不清楚翻转函数到底出了什么问题。我已经阅读了一些打字错误的问题和回答,但似乎没有一个适用于我的问题 代码 “更专注” 正文{背景色:绿色;} p{颜色:白色} img{边框:1px纯黑} #游戏{宽度:400px;高

我正在尝试制作一个简单的注意力集中游戏的OOP版本。每样东西看起来都很好,即游戏板和卡在游戏的每个实例中都会出现,但卡不会翻转

我正在尝试使用Firefox Web Developer进行调试,收到以下错误消息:

TypeError:game_1.flip不是一个函数

我一辈子都搞不清楚翻转函数到底出了什么问题。我已经阅读了一些打字错误的问题和回答,但似乎没有一个适用于我的问题

代码

“更专注”
正文{背景色:绿色;}
p{颜色:白色}
img{边框:1px纯黑}
#游戏{宽度:400px;高度:390px;边框:1px纯白;填充:15px;文本对齐:居中;左边距:自动;右边距:自动;}
#包装{文本对齐:居中;}
// = 0;我——){
r=Math.round(Math.random()*i);
someCard=this.Deck[i];this.Deck[i]=this.Deck[r];this.Deck[r]=someCard;
}
};
this.initDeck=函数(){
变量名称=新数组(“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“杰克”、“女王”、“国王”、“王牌”);
var suitNames=新数组(“黑桃”、“钻石”、“红心”、“梅花”);

对于(var i=0;i而言,问题在于您在编写图像时创建的(X)HTML无效。请参阅以下代码行:

document.writeln("<img src = 'images/card_back.png' id =" + this.gameId + ' Card_' + i + " onclick='" + this.gameId + ".flip("+i+")'>");
然而,尝试直接写入DOM流是一个坏主意。如果您避免使用像
document这样的方法,那会好得多。一起编写
,因为通常建议不要使用它们,而是使用DOM方法

例如,您可以执行以下操作:

document.writeln("<img src = 'images/card_back.png' id ='" + this.gameId + ' Card_' + i + "' onclick='" + this.gameId + ".flip("+i+")'>");
您可以在fiddle中看到,它允许调用
flip
。fiddle现在会破坏页面的格式,这只是一个快速演示。顺便说一下,我还建议不要将
id
属性与空格一起使用


出于好奇:您使用XHTML有什么具体原因吗?您也可以使用HTML(即HTML5)然后还要去掉脚本周围的CDATA块注释。虽然XHTML更严格,这通常不是一件坏事,但HTML5的传播范围更广,因此没有理由不使用它。

如果你能提供一个示例,说明你在哪里制作一个有助于解决问题的游戏实例,我觉得你缺少了一些代码p和我可以写一个完整的答案。我想你的问题是,当你使用
this.gameId
时,你分配img的
onclick
属性,但是除非
this.gameId
实际计算一个变量,该变量引用你的
Game
类的一个实例,否则它将无法调用该方法,如果你理解的话d我来自哪里?顺便说一句,非常好的代码,注释很好,很容易理解。Fred感谢您的回复。我将编辑代码并包括我创建游戏实例的页面正文。此外,如果我理解正确,这个.gameId似乎对游戏对象的每个实例都进行了计算。请参阅此小提琴()快速演示如何避免
文档。write
将允许调用
flip
(它现在会破坏格式,但只是为了显示问题).Ingo谢谢!!这解决了flip函数的问题。我应该始终记得验证我的代码,尤其是在使用XHTML Strict时。我使用XHTML是因为这是我在大学里学到的。我是一名刚毕业的学生。我们总是要使用XHTML,所以有时我忘了还有其他方法。
document.writeln("<img src = 'images/card_back.png' id ='" + this.gameId + ' Card_' + i + "' onclick='" + this.gameId + ".flip("+i+")'>");
var img = document.createElement('img');
img.src = 'images/card_back.png';
img.id = this.gameId + ' Card_' + i;
img.onclick = (function(_this, i) {
    return function() {
        _this.flip(i);
    };
})(this, i);
document.body.appendChild(img);