使用 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/