在改变 this
指向的时候,常常会把这三个方法混淆,下面就详细的整理一下三者的用法和区别数组
var a = { name: '张三' } var b = { name: '李四', sayName: function (a,b,c) { console.log(this.name, a+b+c) } } b.sayName.call(a, 1,2,3) // 输出 --> 张三 6
var a = { name: '张三' } var b = { name: '李四', sayName: function (a,b,c) { console.log(this.name, a+b+c) } } var arr = [1,2,3] b.sayName.apply(a,arr) // 输出 --> 张三 6
var a = { name: '张三' } var b = { name: '李四', sayName: function (a,b,c) { console.log(this.name, a+b+c) } } var c = b.sayName.bind(a,1,2,3) // 需手动调用新函数 c 才会执行 c() // 输出 --> 张三 6
null/undefined
,this默认指向window
null/undefined
,this默认指向undefined
这里用一个表格来展现吧,可能看起来要稍微直观点app
方法名 | 可含参数个数 | 是否自动执行 |
---|---|---|
call | 无数个 | 是 |
appy | 两个,第二个必须为数组 | 是 |
bind | 无数个 | 否,会返回一个新函数 |