demo.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
//案例一:求一个数组中的最大值 (apply可以将数组拆成一个一个的形参传给函数)
var arr = [9, 1, 4, 10, 7, 22, 8];
// Math.max(1,2,34,5);
//apply方法的第二个参数 是一个数组
// 在调用的时候,会将数组中的每一个元素拿出来,作为形参,挨个传递给函数
//apply方法和call方法第一个参数传递null的时候,都表示为函数调用模式
//也就是将this指向window
var max = Math.max.apply(null, arr); //会将arr数组拆成一个一个的形参传给函数。
console.log(max);
//
//案例二:将传入的参数打印,参数之间用"-"相互连接 (apply/call可以让伪数组调用数组原型中自带的系统函数)
function foo() {
// return arguments.join("-"); // arguments是一个伪数组,不能直接使用数组原型中自带的函数
//伪数组不具有join方法,所以这个时候就要考虑去借用一下数组的join方法
// var str = Array.prototype.join.apply(arguments,["-"]);
var str = [].join.apply(arguments,["-"]);
return str;
}
var str = foo(1, 3, "abc", "ffff", 99) // 1-3-abc-ffff-99
console.log(str);
/
//案例三:借用构造函数 实现继承
function Person(){ //父类
this.name = "张莎";
this.age = 18;
}
function Student(){ //子类
Person.apply(this); //通过apply借用父类的构造函数
}
var stu = new Student();
console.log(stu);
</script>
</head>
<body>
</body>
</html>