JavaScript使用ES6的Class面向对象继承时 this is not defined 解决方法


发布者 ourjs  发布时间 1491039041262
关键字 大话编程  分享 
传统的JavaSCript继承是这个样子的:

//相当于构造函数
var myClass = function(name) {
    this._name = name;  
};
//通过原型方法继承
myClass.prototype = {
    (...)
};

或者使用Node.JS的util对象继承

util.inherits(myClass, require('events').EventEmitter);

现在ES6提供了一种新的类和构造函数实现方法:

class Character {
   constructor(name) {
      this._name = name;
   }
}

不过如果你使用了继承就需要先调用 super() 函数,才能使用this,否则会报错

class Hero extends Character{
  constructor(){
      super(); // 如果不调用super()则会报错
      this._name = name;
  }
}

这些规则在ES2015中已经规定了,必须在子类中调用super,否则this无法使用。

  1. In a child class constructor, this cannot be used until super is called.
  2. ES6 class constructors MUST call super if they are subclasses, or they must explicitly return some object to take the place of the one that was not initialized.


相关文章

在JavaScript中创建命名空间的几种写法

深入理解JavaScrip面向对象和原型继承

Node.JS通过原型和类继承










 热门文章 - 分享最多
  1. Github Pages疑似被封: 再也不能用Pages搭建个人博客了
  2. JavaScript条形码生成和扫码识别(Barcode scan)开源库
  3. 关于华为优化30、40老员工的争议
  4. OnceVI前后端分离的数据可视化报表工具简介
  5. 2016 年崛起的 JS 项目
  6. 如何基于SVG矢量图制作一个可填写信息的可视化表单-OnceVI
  7. OnceVI报表制作入门—如何将用户的json数据可视化成名片展示
  8. TCP/UDP协议比较:在Node.JS中UDP服务器和客户端通信示例
  9. 学哪种语言的最赚钱?调查显示JavaScript和SQL是程序员最常用的语言
  10. 搜狐社区宣布关闭,又有多少人的回忆被埋葬在PC时代里?

 相关阅读
  1. TCP/UDP协议比较:在Node.JS中UDP服务器和客户端通信示例
  2. 周鸿祎:一些程序员没有商业意识,却又很自负,一看就知道不会创业
  3. 微信抢红包插件示例代码及其实现原理
  4. 学哪种语言的最赚钱?调查显示JavaScript和SQL是程序员最常用的语言
  5. 搜狐社区宣布关闭,又有多少人的回忆被埋葬在PC时代里?
  6. 第三方评论平台多说即将关闭
  7. 如何搭建个人SASS云盘:30秒快速安装OnceDoc企业私有网盘
  8. 2016年前端技术观察
  9. 在Debian上安装Nginx并搭建一个最简单的静态网站服务器(以OnceAI为例)
  10. OnceIO(Node.JS)的静态文件路由(app.static)

  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA