javascript – 返回ES6以外的类的值

前端之家收集整理的这篇文章主要介绍了javascript – 返回ES6以外的类的值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最近我一直在使用ES6测试类,我注意到,创建一个类时,你不能指定构造函数给出的值.

以前在ES5这是可能的.

在这两种情况下,我将使用新的MyClass来实例化该类
我想要这样做的原因是,我可以返回当前类的一个子集,只有它的功能.

ES5 – 返回我的类是init与:Blah

var MyClass = function() {
  this.initVar = 'Blah'

  return 'My Class was init with: ' + this.initVar
}

ES6 – 返回{}

class Bob {
  constructor() {
   return 'hello' 
  }
}

解决方法

根据TC39网站的 Class article,ES6类语法有一个隐式构造函数,如果在类定义中没有提供这样的函数,则会调用它.

这可以通过提供自己的构造函数和返回任何你想要的对象来覆盖,例如:

class Bob {
  constructor(name) {
    return {hi: name};  // returns an object other than *this*.
  }
}

行动中:

var bob = new Bob('bob');
console.log(bob.hi); // 'bob'

要扩展课程,你可以做:

class Bill extends Bob {
}

但是extends也有一个隐式的构造函数,所以它将返回一个继承自Bob.prototype的Bill的新实例.由于hi是在构造函数中定义的,而不是继承,你可以得到:

var bill = new Bill('bill');
console.log(bill.hi);  // undefined

初始化与Bob相同的Bill,提供一个调用super的构造函数.该调用还将Bill的该对象更改为超级返回的值,例如.

class Bill extends Bob {
  constructor(name) {
    super(name);
  }
}

现在:

var bill = new Bill('bill');
console.log(bill.hi); // bill

值得注意的是,一个classDeclaration的主体始终是strict mode code.

作为一个可运行的代码段:

class Bob {
  constructor(name) {
    return {hi: name};  // returns an object other than *this*.
  }
}

var bob = new Bob('bob');
console.log(bob.hi); // 'bob'

class Bill extends Bob {
  constructor(name) {
    super(name);
  }
}

var bill = new Bill('bill');
console.log(bill.hi); // bill

猜你在找的JavaScript相关文章