繁体   English   中英

在 javascript 中学习 OO:错误 - 无法读取未定义的属性

learning OO within javascript: error - cannot read property of undefined

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我相信我忽略了我正在做的事情。 我正在尝试玩弄物体并获得一些乐趣,但我遇到了这个奇怪的错误。 我在 C++/C# 中使用过 OO。

我创建了一个游戏环境object,它将包含有关该游戏的所有信息。

然后,我创建了一个验证工具(对象),其中包含有效输入的正则表达式测试,我在其中调用并传递,然后返回测试结果。

使用这些对象,然后我创建了一个launch(); function 提示用户输入用户名并使用该工具进行验证。 正是在这次通话中,我遇到了这个错误。

考虑到这个错误,我不确定我所做的在 JS 中是否合法。

 launch(); function launch() { var userNameInput = prompt("Please enter your name:", "User Name"); if (gameEnv.player(userNameInput)) { alert("Please enter only letters for a username."); location.reload(true); } } var gameEnv = { playerName: "", set player(input) { if (validationTool.LetterValidator(input)) { this.playerName = input; return 1; } else { return 0; } }, } var validationTool = { letterOnlyValidation: /^[a-zA-Z^\s]+$/, LetterValidator: function(input) { return letterOnlyValidation.test(input); }, }

2 个回复

首先,除非您需要与旧版本的 JavaScript 兼容,否则 ES6 JavaScript 具有可用于 OO 的实际class声明。

即使使用较旧的 JS,创建 class 实例的方法是使用function定义它,并使用new创建新实例。

此处特定代码的问题:

var gameEnv = {
  playerName: "",
  set player(input) {
    if (validationTool.LetterValidator(input)) {
      this.playerName = input;
      return 1;
    } else {
      return 0;
    }
  },

}

...是你用setplayer定义了一个 setter,但没有 getter,所以 player 可以设置,但不能读回。

此外,由于此 object 尚未使用new正确创建为 class 实例, this指的是全局this ,而不是 object 本身。

这里有几个问题:

  • set 语法绑定了一个 object 属性,应该使用=来赋值。
  • 订单很重要

 var gameEnv = { playerName: "", set player(input) { if (validationTool.LetterValidator(input)) { this.playerName = input; alert("player name set"); } else { alert("Please enter only letters for a username."); } }, } var validationTool = { letterOnlyValidation: /^[a-zA-Z^\s]+$/, LetterValidator: function(input) { return this.letterOnlyValidation.test(input); }, } launch(); function launch() { var userNameInput = prompt("Please enter your name:", "User Name"); gameEnv.player = userNameInput; }

1 JavaScript无法读取未定义错误的属性“ classList”

我当时正在从事一个使用纯JavaScript制作滑块的个人项目。 但是js代码无法正常工作。 当我单击下一步按钮时,控制台将显示一个错误,提示Uncaught TypeError:无法读取未定义的属性'classList'。 与上一个按钮相同。 我已尽力而为,但找不到答案。 = ...

3 无法读取未定义的属性“长度” - JavaScript 中的错误

我正在使用再现打字机效果的代码在 html / css / js 中学习动画。 一切正常,但我在控制台上不断收到此错误: 我尝试了一些在谷歌上找到的解决方案,但没有任何效果。 在我的 console.log(dataText) 中,我的数组中的每个字符串都正确执行。 错误出现在循环执行的那一刻。 这 ...

6 javascript中的类型错误:无法读取未定义的属性

我有一个像这样的javascript函数: 错误提示: 无法读取未定义的属性“ 5”。 我已经使用console.log语句进行了检查,并且上面的所有变量都在获取期望值。 我知道什么是Type Error,但不确定它在哪里中断。 **编辑:**这是完整的脚本 ...

7 JavaScript抛出“无法读取未定义的属性……”错误

我正在尝试构建一个基本的JQuery应用程序,该应用程序将从Flickr加载图像,将它们添加到jQuery对象数组中,依次将它们添加到DOM,使其淡入,并在3秒的周期内使其淡出。 但是,在我的displayImage函数中,我无法使用.hide()、. fadeIn()或.fadeOut(), ...

10 javascript错误“无法读取未定义的属性”

javascript、html 和 css 在这个jsfiddle 中工作,但是当输入到这样的 html 文件时: chrome 控制台给出了这个错误 未捕获的类型错误:无法读取未定义(匿名函数)@ index 的属性 'top' - Copy.html:8 此错误是指第 8 行: ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM