您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

学习JS(4)-这个 <源码分享>

  • 时间:2022-07-14 02:14 编辑: 来源: 阅读:300
  • 扫一扫,手机访问
摘要:学习JS(4)-这个 <源码分享>
看了“这个的方向看谁用了”这句话,就没有相关的问题能难倒我了。 打3也符合“这个方向看谁用”的观点 本来这个理论是无敌的,但是ES6有箭头功能,你可以破例,记住就好。 Output undefined,那是因为setTimeout传入的函数实际上是window使用的。 使用箭头功能,打印值变为2。 但需要注意的是,在严格模式下,使用独立函数时,这不会指向窗口。 自从看到“这个的方向看谁用了”这句话,就没有相关的问题能难倒我了。 不信,就这么简单。 例子:var a = 2;函数foo(){ console . log(this . a);} foo();//2这是独立函数调优最常见的用法。 谁用过?当然是window,window.foo 所以这个指向window,window.a自然是2 var a = 3;函数foo(){ console . log(this . a);}var obj = { a:2,foo:foo };obj . foo();//2打印输出2 谁用过foo函数?是obj 所以这指向obj This.a自然等于obj.a,obj . a等于2 但是这种情况有一点需要注意:var a = 3;函数foo(){ console . log(this . a);}var obj = { a:2,foo:foo };var func = obj.foofunc();//3什么,印了3,你还忽悠我!不用担心,func其实是对obj.foo的引用,引用的是foo函数本身,所以func()和foo()是一样的,所以这个指向window。 打3也符合“这个方向看谁用”的观点 函数foo(){ console . log(this . a);} var obj = { a:2 };foo . call(obj);//2call和apply会强制这个绑定到第一个参数,foo.call(obj)可以理解foo函数是obj用的,所以这个会指向obj。 var a = 2;function foo(){ this . a = 3;} var bar = new foo();a;//2;bar.a//3;这里的foo函数是new运算符使用的,它会自动执行以下步骤:1 .创建一个全新的对象;2.这个新对象将执行[[Prototype]]连接;3.这个新对象将被绑定到该函数所使用的;4.如果函数不返回其他对象,那么新表达式将自动返回这个新对象。所以当new调用foo时,这就指向了一个新的对象,bar。 因此,this.a修改了bar的属性。 本来这个理论是无敌的,但是ES6有箭头功能,你可以破例,记住就好。 它将根据外层作为使用范围来确定这一点。 function foo(){ setTimeout(function(){ console . log(this . a);})} var obj = { a:2 };foo . call(obj);//未定义的输出未定义。那是因为setTimeout传入的函数实际上是window使用的。 而a没有定义,所以type未定义。 但是有些人不理解,我就换种方式写吧。 函数fn(){ console . log(this . a);} setTimeout(fn);窗口用于调试,因此this.a未定义。 函数foo(){ setTimeout(()= > { console . log(this . a);})} var obj = { a:2 };foo . call(obj);//undefined使用箭头函数后,打印的值变成2。 其this属于foo()函数的操作域,foo被obj使用,所以会输出2。 现在这些问题都可以解释了。 但需要注意的是,在严格模式下,使用独立函数时,这不会指向窗口。 var a = 2;函数foo(){ " use strict " console . log(this . a);} foo()//未捕获的类型错误:无法读取属性:一个:的undefined OK,现在没什么能难倒你了。


  • 全部评论(0)
上一篇:Js知识点
下一篇:Js知识点
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部