我正在面试,他们让我写一个函数,在白板上用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
你应该怎么做?
答案 0 :(得分:5)
我想你想要
var max = Function.prototype.apply.bind(Math.max, Math);
也就是说,您创建了一个函数,它将Function.prototype.apply
Math.max
上的Math.max.apply
调用Math
,Function.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