1.全局代码中的this:
全局范围内的this将会指向全局对象,在浏览器中即是Window。
2.作为单纯的函数调用:
这里的this指向了全局对象,即window。在严格模式中,则是undefined。3.作为对象的方法调用:
输出 fooCoder says hello world,this指向person对象,即当前对象4.作为构造函数:
new FooCoder(); 函数内部的this指向新创建的对象。
5.内部函数:
严格模式下这里的this为undefined this指向person对象在函数内部中,this没有按预想的绑定到外层函数对象上,而是绑定到了全局对象。一般的处理方式是将this作为变量保存下来,一般约定为that或者self。
6.使用call和apply设置this:
person.hello.call(person,"world");
apply和call类似,this都会被显示地设置为第一个参数,只是后面的参数是通过一个数组传入,而不是分开传入。
fun1.call(this, arg1, arg2); //参数列表
fun1.apply(this, [arg1, arg2]); //参数数组
如何解决回调函数绑定的问题:
ES5中引入了一个新的方法,bind();
fun.bind(thisArg[,arg1[,arg2[,...]]]);
thisArg,当绑定函数被调用时,该参数会作为原函数运行时的this指向。当使用new操作符调用绑定函数时,该参数无效。当绑定函数被调用时,这些参数加上绑定函数本身的参数会按照顺序作为原函数运行的参数,绑定函数会以创建它时传入bind方法的第一个参数作为this。
JavaScript中的this,总结一下几点:
1.当函数作为对象的方法调用时,this指向该对象。
2.当函数作为单纯的函数调用时,this指向全局对象(严格模式时,为undefined)。
3.构造函数中this指向新创建的对象。
4.嵌套函数中的this不会继承上层函数的this,如果需要,可以用一个变量保存上层函数的this。
5.如果在函数中使用了this,只有在函数直接被某对象调用时,该this才指向该对象。
网友评论