例如,这是完美的代码. (风格是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'); } }