将javascript Max函数包装器转换为Math.Max的函数指针

时间:2016-05-26 23:04:52

标签: javascript

我正在面试,他们让我写一个函数,在白板上用javascript查找数组中的最大值。 我写道:

function max(a) { return Math.max.apply(Math,a) }

他们说好,但是如果你不想写出一个函数并且只有最大点数Math.max会怎样。我说我认为你不能那样做。我想他们说你可以这样做:

var max = Math.max.apply.bind(Math)

但是当我这样做时,我打电话给max([1,2])得到一个错误:

Uncaught TypeError: Function.prototype.apply was called on #<Object>, which is a object and not a function

你应该怎么做?

1 个答案:

答案 0 :(得分:5)

我想你想要

var max = Function.prototype.apply.bind(Math.max, Math);

也就是说,您创建了一个函数,它将Function.prototype.apply Math.max上的Math.max.apply调用MathFunction.prototype.apply作为第一个参数,并重定向新函数的参数(它应该是一个数组)作为Function.prototype.apply的附加参数。

然后,Math.max会在Math上调用Math.max,将其数组参数作为Math.max(...iterable); 的参数传播。

但当然,使用ES6传播运营商要好得多:

ldappasswordmodify -D cn=mgr -w mgrpw -a uid=user,ou=people,o=systems,dc=program -n newpassword