美文网首页
js中的this到底是谁

js中的this到底是谁

作者: 朝文天下 | 来源:发表于2016-02-27 12:11 被阅读36次

    js中函数的4中调用方式

    1作为普通函数来调用,this的值指向window,准确的说this为null,但是被解释成了window,但是在ECMA5标准中把null解释成了undefined

    
    function foo(){
      console.log(this.age);
    }
    
    foo();
    

    2作为对象的方法来调用,this指向调用那一刻的调用者obj,也就是该对象

     
     var obj={
        xx:999,
        yy:888,
        t:function(){
            alert(this.xx);//相当于obj.xx
        }
     };
    obj.t();//999
    
    
    /*关于调用“那一刻”的例子,虽然原来是obj在调用,
    但是在dog.t=obj.t后,调用者成了dog,所以此时this指向了dog
    */
    var dog ={
        xx:'huzi'
    };
    
    dog.t=obj.t;
    dog.t();//huzi
    

    3作为构造函数调用时,也就是声明对象,因为在js中没有类的概念,创建对象是用构造函数来完成的,或者直接用json 来写对象。
    形成1个空对象constructor,也就是{};
    this指向该空对象

    
    
    function Animal(name.age){
        this.name = name;
        this.age =  age;
        this.bark:function(){
            console.log('i am'+this.name+'!');
        }
    /*this.bark中的this指向空对象constructor,但
        是console中的this指向谁还不知道,因为此时还没有
        调用者
    */
    }
    var dog = new Animal('huzi',5);//形成对象的一个实例,this此时指向了dog
    dog.bark()//i am huzi
    
    

    .函数作为构造函数时,return的值是忽略的,还是返回对象,
    它绑定的this指向新创建的对象,并默认返回对象(this),也就是说,不需要在最后写return this;。

    4 函数被call,apply调用时

    '函数名.call(对象,参数1,参数2)'
    function t(num){
        console.log('我的真实年龄是' + this.age);
        console.log('但我一般告诉别人我的年龄' + (this.age+num);
    
    }
     
     var zhangsan = {
        'name':'zhangsan',
        'age':30
     }
     t.call(zhangsan,5);
     /*
     首先,函数t中的this指向对象(zhangsan);
     然后,运行t(参数1,参数2……参数n);
     这个就是对象冒充
    
      */
    
    
    

    相关文章

      网友评论

          本文标题:js中的this到底是谁

          本文链接:https://www.haomeiwen.com/subject/lwpwkttx.html