-call apply bind 区别
共同点:都可以修改this指向,第一个参数都是修改的this 不同点 传参方式不同:call是逐一传参,apply是数组/伪数组传参 函数名.call(修改的this,参数1,参数2...) 函数名.apply(修改的this,数组1,数组2...) 执行机制不同:call和apply会立即执行函数,bind不会立即执行 bind会得到一个修改铜this后的新函数
判断数据类型 1.typeo有两种数据无法检测:null,array 2.Object.prototype.toString.call(数据)
代码补充
console.log(this)
console.log(a + b)
}
//(1)函数名.call(修改的this,参数1,参数2…………)
fn.call({name:'张三'},10,20)
//(2)函数名.apply(修改的this, 数组/伪数组 )
// apply底层会自动遍历数组,然后按照顺序逐一传参
fn.apply({name:'李四'},[15,25])
//(3)函数名.bind(修改的this)
// bind不会立即执行函数,而是返回一个修改this之后的新函数
let newFn = fn.bind({name:'王五'})
newFn(8,9)
//值类型
let bol = true
let nul = null
//引用类型
let arr = [10, 20, 30]
console.log(typeof bol)//'boolean'
console.log(typeof nul)//'object'
console.log(typeof arr)//'object'
/* 万能数据类型检测 : Object.prototype.toString.call( 数据 )
原因: 在Object.prototype中有一个方法叫做toString, 返回一个固定格式字符串
'[object 数据类型]'
*/
console.log(Object.prototype.toString.call(bol))//'[object Boolean]'
console.log(Object.prototype.toString.call(nul))//'[object Null]'
console.log(Object.prototype.toString.call(arr))//'[object Array]'