js 中的 call apply bind 的用法
都是用来指定 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]