作家
登录

JavaScript 中的 this 全面解析

作者: 来源: 2017-05-24 09:10:29 阅读 我要评论

隐式绑定

关于this,一般来说,谁调用了办法,该办法的this就指向谁,如:

  1. function foo(){ 
  2.     console.log(this.a) 
  3.  
  4. var a = 3; 
  5.  
  6. var obj = { 
  7.     a: 2, 
  8.     foo: foo 
  9. }; 
  10.  
  11. obj.foo(); // 输出2,因为是obj调用的foo,所以foo的this指向了obj,而obj.a = 2 

如不雅存在多次调用,对象属性引用链只有上一层或者说最后一层在调用地位中起感化,如:

隐式绑定和显式绑定哪个优先级更高?我们来测试一下:

  1. function foo() { 
  2.     console.log( this.a ) 
  3.  
  4. var obj2 = {  
  5.     a: 42, 
  6.     foo: foo 
  7.  
  8. var obj1 = { 
  9.     a: 2, 
  10.     obj2: obj2 
  11.  
  12. obj1.obj2.foo(); // 42 

隐式损掉


一个最常见的this绑定问题就是被隐式绑定的函数会损掉绑定对象,也就是说他回应用默认绑定,大年夜而把this绑定到全局对象或者undefined上,取决于是否是严格模式。

  1. function foo() { 
  2.     console.log( this.a ) 
  3.  
  4. var obj1 = { 
  5.     a: 2, 
  6.     foo: foo 
  7.  
  8. var bar = obj1.foo; // 函数别号! 
  9.  
  10. var a = "oops, global"; // a是全局对象的属性 
  11.  
  12. bar(); // "oops, global" 
  1. function foo(something){ 
  2.     this.a = something 
  3.  
  4. var obj1 = {} 
  5.  
  6. var bar = foo.bind(obj1); 
  7. bar(2); 
  8. console.log(obj1.a); // 2 
  9.  
  10. var baz = new bar(3); 
  11. console.log(obj1.a); // 2 
  12. console.log(baz.a); // 3 

固然bar是obj.foo的一个引用,然则实际上,它引用的是foo函数本身,是以此时的bar()其实是一个不带任何润饰的函数调用,是以应用了默认绑定

一个更奥妙、更常见并且更出乎料想的情况产生在传入回调函数时:

  1. function foo() { 
  2.     console.log( this.a ) 
  3.  
  4. function doFoo( fn ){ 
  5.     // fn 其实引用的是 foo 
  6.     fn(); // <
     1/4    1 2 3 4 下一页 尾页

      推荐阅读

      路由器密码忘了怎么办 自己动手不求人

    暗码忘了怎么办生活中路由器应用时光一长,不免产生问题,我们想要更改无线暗码、信道等无线路由器的设置,>>>详细阅读


    本文标题:JavaScript 中的 this 全面解析

    地址:http://www.17bianji.com/lsqh/35377.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)