美文网首页
JavaScript--this指针的使用

JavaScript--this指针的使用

作者: 彤_姑娘 | 来源:发表于2016-11-30 23:48 被阅读22次

    重要的事情先讲三遍:谁调用this,this指向谁!谁调用this,this指向谁!谁调用this,this指向谁!
    (1)this由test调用,this指向window,结果this.m的值为100。

    window.m=100;//window.m=100等价于 this.m=100
        function test(){
            alert(this.m);
        }
        window.test();//test()等同于window.test()
    

    (2)this由test调用,test由obj调用,因此this.m的值就为obj.m的值,为100.

    this.m=1000;
        var obj = {
            m:100,
            test:function(){
                alert(this.m);
            }
        }
        obj.test();
    

    (3)return function()已经将自己从obj中抛出来了,此时它指向外面的window,因此this.m的值为1000

    this.m=1000;
        var obj = {
            m:100,
            test:function(){
                alert(this.m);
                
                //闭包
                return function(){
                    alert(this.m);
                }
    
            }
        };
        obj.test()();
    

    obj.test()一个括号调用test()的函数,但不包括return后的函数;
    obj.test()()两个括号可以执行到return后的函数。
    也可以写成:(obj.test())();
    或者:var t = obj.test(); window.t();

    (4)当在外部调用函数test()时,this指向window,就会执行color:"green"的代码。点击按钮时,是button调用test()函数,因此this指向button。
    html

    <input type="button" id="test" value="点击一下" style="color:red;">
    

    JavaScript

    var style = {
            color:"green"
        }
        function test(){
            alert(this.style.color);//this指向button
        }
        document.getElementById("test").onclick=test;
    
        window.test();
    

    (5)结果为1,p调用了geta(),geta()被挂在test原型上,p又是test声明出来的,因此p应该找到test()下的this.a 与外面的1000无关。

     this.a=1000;
       function test(){
        this.a=1;
       }
       test.prototype.geta = function() {
        return this.a;
       };
       var p = new test;
       console.log(p.geta());//1
    

    (6)结果为1,p是test()声明的,因此直接执行test()函数,与test.prototype.a = 100;无影响

    function test(){
        this.a=1;
      }
      test.prototype.a = 100;
      var p = new test;
      console.log(p);//1
    

    (7)结果仍然为1,因为this的主动权大,因为它在构造函数中。

      function test(){
        this.a=1;
      }
      test.prototype.a = 100;
      var p = new test;
      console.log(p.a);//1
    

    内容为JavaScript关于this的小总结,如果有不正确的地方欢迎小伙伴们指正哦~

    相关文章

      网友评论

          本文标题:JavaScript--this指针的使用

          本文链接:https://www.haomeiwen.com/subject/zpntmttx.html