gpt4 book ai didi

javascript - 为什么使用这个 obj.method.call(obj, arg) 而不是 obj.method(arg)?

转载 作者:行者123 更新时间:2023-11-29 19:25:56 29 4
gpt4 key购买 nike

我有时会看到这种模式......

obj.method.call(obj, arg)  

我不明白为什么它不同于...

obj.method(arg)  

为什么要使用第一种模式?

我的天啊,似乎引起了很多讨论:)

澄清一下,我只询问方法所在的对象与 call() 的第一个参数相同的情况(或者 @FelixKling 说得更好:当所有者接收者 相同)。我不是在问 obj.method.call(obj2, arg)


如下所述,即使绑定(bind)函数的情况也无法区分这两种方法。

o2={p2:3};
o={p1:(function(){return this.p2}).bind(o2), p2:2};
o.p1() === o.p1.call(o) // true

编辑

我猜这个成语的来源是用于重新绑定(bind)对象方法的模式......

obj.method.apply(obj, arguments)

最佳答案

您发布的示例没有区别。但是,obj1.method.call(obj2, arg) 允许您在方法内部更改 thisobj.method.apply(obj, args) 让您拥有可变参数计数。

例如,[].slice.call(arguments)(及其上级,Array.prototype.slice.call(arguments))是一个常见的习语从非数组(arguments)接收器上的数组调用 slice

关于javascript - 为什么使用这个 obj.method.call(obj, arg) 而不是 obj.method(arg)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30838044/

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