javascript_this的几种使用场景

this在定义的时候是确定不了的,只有其在函数执行的时候才能确认值。一般而言,在JavaScript中this指向函数执行时的当前对象,谁调用的就指向谁。

  1. 作为构造函数调用,this 指代new 出的对象

    function Foo(name){
        //this={};
        this.name=name;
        //return this;
    }
    var f=new Foo('zhangsan');
    
  2. 作为对象属性方法调用,this 指代上级对象

    var obj={
        name:'A',
        printName:function(){
            name:'B';
            console.log(this.name);
        }
    }
    
    obj.printName();
    
  3. 作为普通对象函数执行,this指代全局对象

    function fn(){
        console.log(this);//this===window
    }
    
    fn();
    
  4. 在call,apply,bind中使用,此方法的第一个参数为改变后调用这个函数的对象,this指代第一个参数

    function fn1(name){
        alert(name);
        console.log(this);
    }
    
    fn1.call({x:100},"zhangsan");//这时fn1中的this就是{x:100}
    
    fn1.apply({x:100},["zhangsan",20]);//这时fn1中的this就是{x:100}
    
    //bind使用时需要是函数表达式的形式
    var fn3 = function (name,age){
        alert(name);
        console.log(this);
    }.bind({y:200})//这时fn3中的this是{y:200}
    fn3('zhangsan',20);