直接贴代码,后解说,编程就是这样,先应用,后理解
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"
要理解上面的3个概念首先要理解this关键字
this 是什么?
JavaScript this 关键词指的是它所属的对象。
它拥有不同的值,具体取决于它的使用位置:
- 在方法中,this 指的是所有者对象。
- 单独的情况下,this 指的是全局对象。
- 在函数中,this 指的是全局对象。
- 在函数中,严格模式下,this 是 undefined。
- 在事件中,this 指的是接收事件的元素。
像 call() 和 apply() 这样的方法可以将 this 引用到任何对象。
JavaScript call() 方法
call() 方法是预定义的 JavaScript 方法。
它可以用来调用所有者对象作为参数的方法。
通过 call(),您能够使用属于另一个对象的方法。
也就是this在调用的函数内部不同了,例如上面的例子
Person.fullName.call(person1); // 将返回 "Bill Gates"
当调用Person这个类的的fullName方法的call方法传入参数person1,person1这个对象原本是没有fullName这个方法
方法 | call | apply | bind |
方法参数 | 多个 | 单个数组 | 多个 |
方法功能 | 函数调用改变this指向 | 函数调用改变this指向 | 函数调用改变this指向 |
返回结果 | 直接执行 | 直接执行 | 返回待执行函数 |
低层实现 | 通过eval | 通过eval | 间接调用apply |