apply()
第二个参数只能是数组,这个数组将作为参数传给原函数的参数列表arguments
。
其实在实际开发中,JS 继承的方法并不止这一种,使用原型链继承是更加常用的方式,此外还有构造函数继承,这里不展开。而apply使用的场景,更多的使用在这样一个场景:
需要将数组转化为参数列表。
apply()
的这个把数组转化为参数列表的特性,可以让它做一些有趣的事情。
例如:
var list1 = [0,1,2]; var list2 = [3,4,5]; [].push.apply(list1,list2); console.log(list1);// >>> [0,1,2,3,4,5]
可以这样理解:
list1调用了属于数组对象的push方法,这个push方法需要传入一个参数列表,而恰好我们有了list2这个数组类型的参数列表,实现了拼接操作。
第三行就相当于:list1.push(3,4,5);
同理可实现求数组最大、最小值:
Math.max.apply(null,arr); // >>>>>>5
这里因为max不需要自定义对象调用,所以第一个参数选择了null。