javascript - 为什么 immutable.js 类不需要 "new"?

标签 javascript ecmascript-6 immutable.js

例如,这是非常好的代码。 (风格为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

最佳答案

看起来 immutable 的魔力发生在他们对转译器的自定义插件中 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');
    }
}

对于 immutable,似乎 ES6 代码首先被转换为已经包含 createClass 调用。

关于javascript - 为什么 immutable.js 类不需要 "new"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32619382/

相关文章:

javascript - 隐藏/更改 javascript 提示标题

c# - ASP.NET 在单击按钮时显示 div

javascript - ES6 JavaScript 类

javascript - 不可变的 js Map() - 不理解 take() 和 skip()

javascript - Immutable.js List() 和 List.of() 之间的区别?

javascript - 如何在 Immutable.js 中添加列表到列表?

javascript - JavaScript 中的字符/URI 编码不同步?

javascript - 这是一种在 JavaScript 中通过引用传递的迂回方式吗?

javascript - 将元素数组位置更改为顶部

javascript - 在 Javascript 中的每个新字母之前分割字符串