所以,一个 ES6 语法难题。据我所知,如果您创建一个 javascript 类,例如:DragonSlayer,然后要创建该类的实例,您需要使用“new”关键字。
let girl = new DragonSlayer();
如果您不想使用“new”关键字,您可以创建一个包装函数。
function ADragonSlayer () {
return new DragonSlayer() }
let girl = ADragonSlayer();
谁能给我解释一下 Immutable.js 库是如何工作的?
这似乎创建了一个名为 List 的类,然后将具有该类的对象导出为同名属性(您在导入期间通过解构获得)。然而,要创建一个实例,您只需调用该函数即可,根本不需要 new。
const { List } = require('immutable')
let newList = List();
我在源代码中四处搜寻,但到目前为止还无法掌握这种黑魔法是如何构建的。有人有一些指示吗?
最佳答案
它利用 Object.create
在constructor
你会看到它要么返回:
- 传递的值
empty
这是从emptyList()
返回的值这叫makeList()
- 或者直接从
makeList()
调用返回的值。
在 makeList() 内部是对 Object.create()
的调用,它根据传递的原型(prototype)创建一个新对象
const list = Object.create(ListPrototype);
这就是您调用 List()
时最终返回的内容
还有一个问题here询问使用 Object.create
而不是 new
。
关于javascript - Immutable.js 是如何省略 new 关键字的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46126406/