Javascript 为什么我们必须通过';这';至';应用';
在 为什么我们必须将Javascript 为什么我们必须通过';这';至';应用';,javascript,Javascript,在 为什么我们必须将Math作为this对象传入?我很难理解这一点 在执行过程中,应用是否需要此(数学)的具体内容?这取决于max的内部实现细节。如果它使用了这个,并且期望这个是数学,那么它是必需的。如果它没有以任何方式使用this,那么您传递的thisArg与此无关 max可能会使用Math的一些辅助方法来实现其内部实现。除非你明确知道它不存在,否则你应该保留它的上下文。(一般来说,无论何时使用apply或call或传递方法。)使用apply()方法(Function.prototype.ap
Math
作为this
对象传入?我很难理解这一点
在执行过程中,
应用
是否需要此
(数学
)的具体内容?这取决于max
的内部实现细节。如果它使用了这个
,并且期望这个
是数学
,那么它是必需的。如果它没有以任何方式使用this
,那么您传递的thisArg
与此无关
max
可能会使用Math
的一些辅助方法来实现其内部实现。除非你明确知道它不存在,否则你应该保留它的上下文。(一般来说,无论何时使用apply
或call
或传递方法。)使用apply()
方法(Function.prototype.apply()
)都可以将参数作为数组传递给函数以及通过它传递给上下文
var values = [1,2,3,4,5];
var max = Math.max.apply(Math, values);
在本例中,max
不需要或不使用当前上下文,因此您可以放置任何内容,它将工作,包括null
看这个问题:不,你不必通过它
Math.max.apply(null,values)
可以很好地工作。由于该方法在内部不使用this
,实际上您可以在那里传递任何内容。在这种情况下,您不需要这样做,因为Math.max
确实需要this
,所以即使null
也可以工作。有趣,因为在Nicholas Zakas关于Javascript的书中,他写道我们需要传递它:“这项技术的关键是将Math对象作为apply()的第一个参数传递,以便正确设置该值。然后可以将数组作为第二个参数传递。”可能这是过时的信息,因为这本书是从2012年开始的。@Sandi:它保证调用完全等同于Math.max(1,2,3,4,5)
(因为该调用的对象是Math
,就像任何其他x.y()
调用一样),但我无法想象有任何实现选择在var max=Math.max;最大值(1,2,3,4,5)
。应该禁止违反标准(我就是这么读的——没有特别的说明,但没有提到这个值,而且“它没有说在遵循标准步骤时不要违反”听起来不太符合标准)。好吧,如果我需要这样做,为什么这里的Math
是适当的上下文,而不是例如global
?如果您通过Math.max()
定期调用它,那么上下文就是Math
,这取决于您调用它的方式。因此,如果max
期望任何内容作为其上下文,那么它将是Math
;这段对话已经结束。
func.appy(this, [argumentarray])