1.函数调用模式

function fn(){
            console.log(this);
        }

fn();//输出window

2.方法调用模式

特征:方法一定是是依赖于某个对象的,把一个函数赋值给一个对象的属性,那么就成为方法,就是函数前面必须有引导对象,this的含义就是引导函数的对象。

 var obj = {
            test:function(){
                console.log(this);
            }
}

obj.test(); //输出obj

3.构造函数调用模式

  function Person(){
            console.log(this);
        }
        var p1 =new Person();//输出Person

4.上下文调用模式

call与apply都可以“借用”另一个对象的方法。可以将一个函数的对象的上下文由初始的上下文改变新对象的上下文。call和apply是为了动态改变this的指向的
用法
1.函数.apply(新对象, [参数数组]);
2.函数.call(新对象,agr1, arg2, arg3…);

 var name = "尼古拉斯凯奇·凯奇·赵四";
 function say( ) {
    console.log(this.name);
 }
 var obj = {
	name:"拉布拉多·狗剩"
 };
 
say.call(obj); //拉布拉多·狗剩  由window->obj
say.apply(obj);//拉布拉多·狗剩  由window->obj

本文转载:CSDN博客