首页 > 代码库 > JS中this的指向问题

JS中this的指向问题

  this的指向由调用时决定而不是定义时决定,定义的方式:

        //直接定义在函数里        var a="window中的a";        var name="window";        function aa(args1,args2){            console.log(this.a+args1+args2);        }        aa();   //this=window        //定义在对象中        var o={            a:"o中的aaa",            name:"nicole",            print:function(){                console.log(this.name);            }        };        o.print();    //nicole,this=o        //将对象的方法赋给其他变量,this由该变量决定。        var bb=o.print;        bb();  //widnow,this=window        //使用call&apply改变this指向                aa.call(o,"+abc","+def");    //在o中执行,aa(args1,agrs2)方法,参数单个接收        aa.apply(o,["+abc","+def"]);  //在o中执行,aa(args1,agrs2)方法,参数接收数组形式        aa("+abc","+def");        //获取DOM节点,对该节点添加的事件中,this一般指向该节点对象。

call重写新对象的属性:

        function p(){            this.name="abc";            this.age=24;        }        o={            name:"niole"        };                

执行完p.call(o);后,name&age被写入o,并且将原来的o.name覆盖:

技术分享

因为:p.call(o)等价于o.p(),p()执行完毕后,p中的this=o,p()执行后,o.name="abc",o.age=24;

JS中this的指向问题