call和apply是为了多个对象用同一个方法,书写简便;
能够编写用于不同对象的方法(简单理解为公用方法)。
如果不用call,就得用全局函数入参方式解决,比较繁杂
https://www.w3school.com.cn/js/js_function_call.asp
1、call和apply的相同
- 都可以改变对象方法里的对象引用;
- 都可以接受对象方法的参数,比如city和country
var person = {
fullName: function(city, country) {
return this.firstName + " " + this.lastName + "," + city + "," + country;
}
}
2、call和apply的区别
call() 方法分别接受参数,也就是参数列表。
apply() 方法接受数组形式的参数。
如果要使用数组而不是参数列表,则 apply() 方法非常方便。
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript 函数</h1>
<p>此例调用 person 的 fullName 方法,在 person1 上使用它:</p>
<p id="demo"></p>
<p id="demo1"></p>
<script>
var person = {
fullName: function() {
return this.firstName + " " + this.lastName;
},
fullNameAge: function() {
return this.firstName + " " + this.lastName + this.age;
}
}
var person1 = {
firstName:"Bill",
lastName: "Gates"
}
var person2 = {
firstName:"Steve",
lastName: "Jobs",
age: "22"
}
var x = person.fullName.call(person1);
document.getElementById("demo").innerHTML = x;
var y = person.fullNameAge.call(person2);
document.getElementById("demo1").innerHTML = y;
</script>
</body>
</html>