如下 想输出person1对象的 姓名,
- 可以调用person对象的fullName方法,
- 怎么传递参数呢,用.call(person1) 传递参数
- 调用方法 person.fullName,调用括号移动到call后面啦
call方法的作用,改变了对象里的this指向,指定的对象可以去调用另一个对象里的方法
//本例调用 person 的 fullName 方法,并用于 person1:
var person = {
fullName: function() {
return this.firstName + " " + this.lastName;
}
}
var person1 = {
firstName:"Bill",
lastName: "Gates",
}
var person2 = {
firstName:"Steve",
lastName: "Jobs",
}
person.fullName.call(person1); // 将返回 "Bill Gates"
call()总结:
使用call() 方法,你可以编写能够在不同对象上使用的方法,此为方法重用
call()括号内传空,或传递null,undefined时,this指向window对象
<script>
// let name='judy';//let定义不是window全局变量
var name="tom";
let a={
name:'aa'
}
let b={
name:'rubby',
getName(){
return this.name;
}
}
let name1=b.getName.call(a);
let name2=b.getName.call();//this指向window对象
console.log("name1的值是"+name1);// aa
console.log("name2的值是"+name2);// "" let定义name时输出
let name3=b.getName.call(null);//调用方法里的this还是指向window,所以输出tom
let name3=b.getName.call(undefined);//调用方法里的this还是指向window,所以输出tom
</script>
call() 传递多个参数 注意被调用的函数要写形参,便于调用时传递多个参数
<script>
let couts={
a:12
}
let obj={
addFun(b,c){
console.log(b+c+this.a); //20
}
}
obj.addFun.call(couts,3,5);
//第一步,addFun的this指向couts的引用
//第二步,给addFun传参3和5
//第三步,执行addFun,得到3+5+12。
</script>
参考 https://www.w3school.com.cn/js/js_function_call.asp