一、基础用法
1、this的指向问题
var a = {
data: '这是数据!',
fn: function() {
console.log(this.data, this.name);
}
}
var b = {
name: '陈独秀'
}
a.fn(); // 这是数据! undefined
this的指向永远为调用处(除非用箭头函数),因此a函数中的name为undefined
2、call、apply、bind的作用:改变this指向
若第一个参数为null,则会使用全局对象替代(三者都一样)
- call、apply的用法
```javascript
var a = {
data: ‘这是数据!’,
fn: function() {
} }console.log(this.data, this.name);
var b = { name: ‘陈独秀’ }
a.fn.call(b); // undefined ‘陈独秀’ a.fn.apply(b); // undefined ‘陈独秀’
上述代码中,this的指向从a被改变成了b,因此data数据为undefined
- **bind的用法**
```javascript
var a = {
data: '这是数据!',
fn: function() {
console.log(this.data, this.name);
}
}
var b = {
name: '陈独秀'
}
a.fn.bind(b); // 无任何反应,相当于 function() {...},未调用函数
a.fn.bind(b)(); // undefined '陈独秀'
bind()会返回一个函数,因此需要多加一个()来调用这个函数才能正常输出
二、多参数用法
1、call、bind
var a = {
fn: function(p1, p2) {
console.log("参数p1:" + p1, "参数p2:" + p2);
}
}
var b = {}
a.fn.call(b, "a", "b") // 参数p1:a 参数p2:b
a.fn.bind(b, "a", "b")(); // 参数p1:a 参数p2:b
2、apply
a.fn.apply(b, ["a", "b"]) // 参数p1:a 参数p2:b