You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
varcontext='global';varobj={context: 'object',method: function(){functionf(){varcontext='function';returnthis+':'+this.context;}returnf();//invoked without context}};document.write(obj.method());//[object Window]:global
4.在构造函数内部使用时
当函数被用作构造函数时(即使用 new 关键字调用它时),此内部函数体指向正在构建的新对象。
varmyname='global context';functionSimpleFun(){this.myname='simple function';}varobj1=newSimpleFun();//adds myname to obj1document.write(obj1.myname);//simple function
在事件处理中于 js 中绑定或注册,或在 html 中注册并直接使用 this 关键字(非丢失 this 指向),this 代表 html 元素,在事件处理与元素上直接绑定事件方法名会使得 this 指向 window
箭头函数中,this代表其位置外层的this对象
小测验
demo1
if(true){// What is `this` here?}
demo2
varobj={someData: 'a string'};functionmyFun(){returnthis;// What is `this` here?}obj.staticFunction=myFun;console.log('this is window:',obj.staticFunction()==window);console.log('this is obj:',obj.staticFunction()==obj);
demo3
varobj={myMethod: function(){returnthis;// What is `this` here?}};varmyFun=obj.myMethod;console.log('this is window:',myFun()==window);console.log('this is obj:',myFun()==obj);
demo4
functionmyFun(){returnthis;// What is `this` here?}varobj={myMethod: function(){eval('myFun()');}};
demo5
functionmyFun(){returnthis;// What is `this` here?}varobj={someData: 'a string'};console.log('this is window:',myFun.call(obj)==window);console.log('this is obj:',myFun.call(obj)==obj);
this 的各个使用场景
1. 在全局环境中使用时候
在全局中使用,this 就代表全局对象 Global(在浏览器中为 window)
当您在全局上下文中定义的函数中使用这个函数时,它仍然绑定到全局对象,因为函数实际上是一种全局上下文的方法。
上面的 f1 是一个全局对象的方法。因此,我们也可以在 window 上调用它,如下所示:
2.在对象方法中使用时
在对象方法中使用此关键字时,它将绑定到“立即”封闭对象。
上面经把这个词直接放在双引号中。要指出的是,如果将对象嵌套在另一个对象内,则该对象将绑定到直接父对象。
即使你将函数显式添加到对象作为方法,它仍然遵循上述规则,这仍然指向直接父对象。
3.调用无上下文的函数时
当你使用这个在没有任何上下文的情况下调用的函数(即不在任何对象上)时,它被绑定到全局对象(浏览器中的窗口)(即使函数是在对象内部定义的)。
4.在构造函数内部使用时
当函数被用作构造函数时(即使用 new 关键字调用它时),此内部函数体指向正在构建的新对象。
5.当在原型链上定义的函数内部使用时
如果该方法位于对象的原型链上,则此方法内部引用方法被调用的对象,就好像方法在对象上定义一样。
6.在 call(),apply(),和 bind()函数调用时
这里的 this 替换为对应方法传入的第一个参数.
7.在事件处理中
8.箭头函数的 this
箭头函数转成 ES5 的代码如下。
下面代码中,转换后的 ES5 版本清楚地说明了,箭头函数里面根本没有自己的this,而是引用外层的this。
箭头函数被非箭头函数包含,this 绑定的就是最近一层非箭头函数的 this
结论
this
代表全局对象this
代表此对象this
代表全局对象this
代表正在构建的新对象this
代表此对象this
代表对应方法传入的第一个参数html 元素
,在事件处理与元素上直接绑定事件方法名会使得 this 指向window
this
代表其位置外层的this对象小测验
demo1
demo2
demo3
demo4
demo5
公布答案
参考
The text was updated successfully, but these errors were encountered: