使用 new 调用构造函数时,不能直接使用数组并应用(应用执行 [[Call]] 而不是 [[Construct]])。但是,由于扩展语法,数组可以很容易地与 new 一起使用。

var dateFields = [1970, 0, 1];  // 1 Jan 1970
var d = new Date(...dateFields);

那么为什么我们不能使用申请构造函数呢?
调用和构造之间有什么区别吗?

最佳答案

构造函数使用 this 访问构造的对象,您可以使用 apply 的第一个参数轻松模拟,因此 [[Construct]] 基本上只是具有不同上下文的 [[Call]] :

var obj = Object.create(Date.prototype);
Date.apply(obj, dateFields);

如果你想要一个 ES6 版本,有一个相当新的方法可以直接调用 [[construct]]:
var obj = Reflect.construct(Date, dateFields);

关于javascript - [[call]] 和 [[construct]] 有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51397778/

10-09 02:30