javascript – 为什么immutable.js类不需要“new”?

前端之家收集整理的这篇文章主要介绍了javascript – 为什么immutable.js类不需要“new”?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
例如,这是完美的代码. (风格是ES6)
import {List} from 'immutable';

console.log(List()); // List []

但是,这失败了.

class Foo {}

Foo(); // TypeError: Cannot call a class as a function

此外,这也失败了.

class Foo extends List {}

Foo(); // TypeError: Cannot call a class as a function

解决方法

看起来不可变的魔力发生在它们的自定义插件中,转发器 here.

他们基本上创建了自己的createClass,它会跳过支票.这是我上面代码的转换(通过babel)版本的片段.

var Foo = (function (_List) {
  _inherits(Foo,_List);

  function Foo() {
    _classCallCheck(this,Board);

    _get(Object.getPrototypeOf(Foo.prototype),'constructor',this).apply(this,arguments);
  }

  return Foo;
})(_immutable.List);

_classCallCheck看起来像这样.

function _classCallCheck(instance,Constructor) {
    if (!(instance instanceof Constructor)) {
        throw new TypeError('Cannot call a class as a function');
    }
}

对于不可变的,似乎ES6代码首先被转换为已经包含createClass调用.

猜你在找的JavaScript相关文章