都是用来指定 this 的环境
相同点:call apply bind 改变 this 指向,第一个参数是需要更改的this
不同点:bind 方法返回的是一个修改过后的的函数需要在调用,apply 第二个参数是 数组,call ,bind 正常字符串可以是多个字符串
1、call,apply 调用一个对象的的一个方法,用另一个对象替换当前对象,eg: B.call(A,args1,args2....) eg:B.apply(A,[a,b,...])
var name = '小仙女' , age = 18
var a = {
name:'孟浩然',
objage:this.age,
fn:function() {
console.log(this)
console.log(this.name + this.age)
}
}
var fw = {
name:'小帅哥',
age:18
}
a.fn.call() // 小仙女 19 此时的 this 指向 window
a.fn.call(fw) // 小帅哥18 此时this 指向 {name:'小帅哥',age:18}
a.fn.apply(fw) // 小帅哥18 此时this 指向 {name:'小帅哥',age:18}
a.fn.bind(fw)() // 小帅哥18 此时this 指向 {name:'小帅哥',age:18}
function getType(a){
2.call 的应用
2.1 利用 call 判断数据类型 可以利用 Object.prototype.toString.call()
console.log(Object.prototype.toString.call("qq")) // [Object String] 返回值都是字符串类型
console.log(Object.prototype.toString.call(12)) // [object Number]
console.log(Object.prototype.toString.call(false)) // [object Boolean]
console.log(Object.prototype.toString.call(undefined)) // [object Undefined]
console.log(Object.prototype.toString.call(null)) // [object Null]
console.log(Object.prototype.toString.call(function(){})) // [object Function]
console.log(Object.prototype.toString.call([])) // [object Array]
console.log(Object.prototype.toString.call({})) // [object Object]

京公网安备 11010502036488号