一、基础用法

1、this的指向问题

  1. var a = {
  2. data: '这是数据!',
  3. fn: function() {
  4. console.log(this.data, this.name);
  5. }
  6. }
  7. var b = {
  8. name: '陈独秀'
  9. }
  10. a.fn(); // 这是数据! undefined

this的指向永远为调用处(除非用箭头函数),因此a函数中的name为undefined

2、call、apply、bind的作用:改变this指向

若第一个参数为null,则会使用全局对象替代(三者都一样)

  • call、apply的用法 ```javascript var a = { data: ‘这是数据!’, fn: function() {
    1. 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