0

我修改了之前遇到问题的代码,修复了所有错误并在不同的“lint”站点上多次检查。只是为了确保代码在 Jsfiddle 中有效,我单击了 JShint 并被告知一切都有效,但是当我单击按钮时不会运行。创建链接的示例代码:

    (function (g) { "use strict"; //g = game
g = this[g] = function () {
    var answer;
    //pre game
    answer = prompt(g.msg[0]); //instruction prompt asks if youve played game
    if (answer === 'no') {

等等等等 http://jsfiddle.net/ShiiFtyyMendoza/NsVvU/12/

4

2 回答 2

0

尝试在 jsFiddle 上运行时,我在控制台中看到的错误是:Uncaught TypeError: Cannot set property 'zork_clone' of undefined。

字符串 'zork_clone' 仅存在于代码中的两个位置;在第 95 行执行的函数名,以及在第 92 行传入模块的字符串。

跟踪该参数,我们看到从第 2 行抛出的错误:g = this[g] = function () {这告诉我this执行该代码时未定义。

我相信你的情况this是未定义的,因为你是在“自执行匿名函数”的范围内执行的,而不是使用new关键字声明的对象。

于 2013-05-20T02:33:03.063 回答
0

我可以在页面中看到两个问题

onload 事件问题
您的小提琴脚本设置为在 onload 事件之后执行,但在您的脚本中,您再次注册了另一个 onload 处理程序。要在第二个选择字段下的小提琴左侧面板中
修复此问题,请选择Frameworks & ExtensionsNo Wrap - in <body>

匿名函数问题
据我所知,您正在尝试zork_clone在全局范围(即 in )中创建一个具有变量名称的函数(在本例中为具有 name 的函数window)。但是您strict在内部函数中使用模式。在这里,您需要this指向window对象,如果您不使用strict模式,这是正常情况,这会改变strict模式。正如您在这里所发现的,在严格模式下this必须是明确的,否则它将具有undefined您的情况所发生的价值。
解决方法是使用window全局变量而不是this在匿名函数内部使用。

演示:小提琴

于 2013-05-20T03:19:24.037 回答