javascript - JavaScript 类中 undefined variable

标签 javascript jquery arrays class ecmascript-6

我在运行和理解 javascript 中的类时遇到问题。我正在用我制作的一个简单的应用程序对此进行实验。它的最终目标只是从 textarea 中获取名称,将其存储在数组中,然后对其执行操作,例如将它们显示到屏幕上或将它们打乱。为此,我开设了两堂课。一个用于将名称存储到数组中,然后另一个从此类扩展以操作数组 - 只是为了组织。这是我的代码:

将名称存储到数组

import $ from 'jquery';

class SaveInput {

  // dom selection usually and firing events when a page loads.
  constructor(){
    this.mainText = $('.main-text');
    this.names = [];
    this.events();
  }

  //events to watch for such as click
   events() {
    // save names to array, no submit button
    this.mainText.blur(this.saveNameIndex.bind(this));
  }

  // methods to be called from events

  // save names without submitting
   saveNameIndex() {
    let namesResult = this.names = this.mainText.val().split('\n');
     return namesResult;
  }
}

export default SaveInput;

操作板数组

import $ from 'jquery';
import SaveInput from './SaveInput';

class Display extends SaveInput {
  // dom selection usually and firing events when a page loads.
  constructor(names){
    super(names);

    this.h1= $('h1');
    this.events();
  }


  //events to watch for such as click
    events(){
    this.h1.click(this.log.bind(this));
  }

  // methods to be called from events

  //display images with names
  log () {
    console.log('test');
  }

}

export default Display;

我做什么并不重要,正如您从我的第二堂课中看到的那样,我只是试图通过单击 h1 标签来控制台记录一些文本来进行测试。应用程序加载时我总是遇到相同的错误:

App.js:10522 Uncaught TypeError: Cannot read property 'click' of undefined
    at Display.events (App.js:10522)
    at Display.SaveInput (App.js:96)
    at new Display (App.js:10509)
    at Object.defineProperty.value (App.js:10412)
    at __webpack_require__ (App.js:20)
    at Object.defineProperty.value (App.js:63)
    at App.js:66

我想要从 saveInput 类中得到的唯一东西是名称数组,这样我就可以传递它,并且当我扩展该类时似乎存在一些冲突。我错过了什么?

最佳答案

当您创建 Display 对象时,它首先调用基础对象的构造函数。该 SaveInput 构造函数调用您已在派生 Display 类中重写的 this.events() 。该重写的实现期望设置 this.h1,但它尚未设置,因此您会看到错误。

我不太明白你在这里想做什么来知道要建议什么修复,但这是一个基于构造函数中发生的情况以及派生类准备做什么的计时问题。也许您应该从构造函数中取出一些内容,以便在调用 this.events() 之前对象可以完全形成。

此外,如果您希望调用 events()SaveInput 版本,则需要将 super.events() 添加到events()Display 实现,因此基础对象的版本也会被调用。

关于javascript - JavaScript 类中 undefined variable ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48246701/

相关文章:

javascript - 你能阻止 <img> 标签使用 CSS 加载它的图像吗?

javascript - 如何用 Jest 测试 JSX Vue 组件

javascript - Spotify 应用程序 API : Creating a player of top tracks from an artist

javascript - 将事件绑定(bind)到两个函数并在一个函数内取消绑定(bind)时

c - 读取 dat 文件并将数字添加到数组

c - fopen 无法读取文件(文件始终等于 NULL)

javascript - jQuery UI 可拖动到可滚动的 div 中

javascript - 将单击的元素的内部 HTML 打印到控制台

jquery - 如何在此导航栏的 Logo 中垂直居中 img?

java - 查找当前索引并打印数组中的下一条记录