gpt4 book ai didi

javascript - [[call]] 和 [[construct]] 有什么区别?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:39:38 24 4
gpt4 key购买 nike

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

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

那么为什么我们不能使用apply for constructor呢?call 和 construct 有区别吗?

最佳答案

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com