zoukankan      html  css  js  c++  java
  • JavaScript的this简单实用

    1、默认绑定全局变量,在全局函数中:

    function fn(){
      console.log(this.a);      
    }
    var a=2;
    fn();//这里调用的是window

    2、隐式绑定:

    function fn(){
       console.log(this.a);
    }
    var obj={
       a:2,
       fn:fn 
    };
    obj.fn();//这里隐式的调用了obj对象,这里绑定了obj对象

    这里要说明的是让函数传递引用,致使this绑定的上下文改变。则this的失去隐式绑定:

    function fn(){
      console.log(this.a);
    }
    var obj={
      a:2,
      fn:fn
    };
    var bar = obj.fn;
    var a = "wocao";
    bar();//wocao

    3、显示绑定,利用apply,call,bind:

    function fn(){
      console.log(this.a);
    }
    var obj={
      a:2
    };
    fn.call(obj);//不传则为全局变量

    4、new构造对象:

    function fn(a){
      console.log(this.a);
    }
    var bar = new fn(2);
    console.log(bar.a);//这里注意bar并不是一个函数,只是一个被赋值的变量对象

     5、eval函数中this指向:

    function fn(){
           eval("console.log(this.a)");
        }
        var obj = {
          a:3,
          fn:fn
        };
        var a = 0;
        obj.fn();//3,当前函数执行的作用域
    上面的代码有点挫,换了一个
    var name = "window";
    
    var Bob = {
        name: "Bob",
        showName: function(){
            eval("alert(this.name)");
        }
    };
    
    Bob.showName();    //Bob
    var name = "window";
    
    var Bob = {
        name: "Bob",
        showName: function(){
            alert(this.name);
        }
    };
    
    Bob.showName();    //Bob,其实就是没影响啦
    
    
    
    
    

    6、setTimeout,setInterval都会把对象变成全局,两个因为是异步执行的

  • 相关阅读:
    洛谷-P2430 严酷的训练
    Hackthebox网络不稳定的解决方案
    解压
    谷歌地图API密钥未授权利用
    关于读取heapdump踩的一个小坑
    RECON
    最近思考
    go get
    Js跳转
    Session
  • 原文地址:https://www.cnblogs.com/thecatshidog/p/5014425.html
Copyright © 2011-2022 走看看