`
zorufa876
  • 浏览: 82734 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

javaScript中this关键字的指向

阅读更多

js中的this是一个关键字,是一个指针,它指向某个对象.但是有时候大家都会对它到底指向哪个对象 感到混乱:

一:记住三条原则即可

1:当一个函数只是作为一个函数来调用的时候,这个函数中的this指向全局对象。
如:  <script text=”javascript”>
               function doSomething(){
                   alert(this);
               }
               doSomething();
      </script>
this指向的是全局的Window对象。

2:当一个函数作为一个对象的方法来调用的时候,用来调用方法的对象成为关键字this的值
如:  <script text=”javascript”>
                var doSomething={
                  something:function(){
                     alert(this);
                  }
                }      
                doSomething.something();
      </script>
this指向的就是doSomething函数的调用对象(CallObject)。

3:当用构造函数来创建一个对象实例的时候,会把新创建的对象作为this关键字的值来传递;
如:  <script text=”javascript”>
                function doSomething(){
                      alert(this);
                }
               new doSomething();
      </script>
this指向的同样也是doSomething函数的调用对象(CallObject)。
用图来表示就是如下所示:

1

二:考虑一下以下几种容易混淆的情况:
1:绑定元素属性 ,形如<element  onclick=”doSomething()”>
    例:
   <script text=”javascript”>
      function doSomething(){
         alert(this);
      }
   </script>
 <button  type=”button” id=”something” onclick=”doSomething()”>something</button>

此时注册的onclick事件只是对doSomething函数的引用,而不是作为这个element对象的方法被调用,也就是说,this指向 Window对象。
2: 绑定对象属性,形如 element.onclick = doSomething;
     例:
     <button  type=”button” id=”something” onclick=”">something</button>
     <script text=”javascript”>
         function doSomething(){
            alert(this);
         }
     document.getElementById(”something”).onclick = doSomething;
     </script>
很明显,此时的doSomething将会被作为element的onclick方法被调用,所以此时的this指向element对象

上面两种情况如图所示:
 2

三:既然this容易混淆,其实可以通过下面这个方法来避免这种混淆
 <button  type=”button” id=”something” onclick=”doSomething(this)”>something</button>

   <script text=”javascript”>
         function doSomething(o){
             alert(o);          
         }
   </script>
   这也是一个简单的避免调用this出错的方法

四:了解了以上的原理,你就会发现下面这道题目将会非常简单

问:下面这三段js会输出什么?

1:<script text=”javascript”>
                    function doSomething(){
                        alert(this);
                        function doSomething2(){
                             alert(this);
                        }
                       doSomething2();
                    }
                    new doSomething(); 
    </script>

2:<script text=”javascript”>
                    var aaa=”test1″;
                    function doSomething(){
                         var aaa=”test2″;
                         alert(this.aaa);
                     }

            doSomething();  
  </script> 

3:<script text=”javascript”>
                var aaa=”test1″;
                function doSomething(){
                      var aaa=”test2″;
                      alert(this.aaa);
                 }

        new doSomething();  
  </script>
 
答案:

     1:Object,Window  (虽然嵌套函数容易引起混淆,但是只要按照上面所说的两条原则,得出正确的结论应该轻而易举)
     2:test1 (this指向的是Window对象)
     3:undefined(这里this指向的是doSomething的调用对象,而根据函数的局部变量创建的调用对象的属性在变量实例化的过程中会被赋 予undefined值)

ps:如若对javaScript的调用对象等概念还不是很清楚,请参考:
     1:《javaScript权威指南》第五版 第4,8,9章
     2:http://www.cn-cuckoo.com/wordpress/wp-content/uploads/2007/08/JavaScriptClosures.html

分享到:
评论

相关推荐

    JavaScript中this关键字使用方法详解

    在JavaScript编程语言中,`this`关键字是一个至关重要的概念,它常常引发初学者的困惑,因为它的值在不同的上下文中可能会有所不同。`this`关键字主要用来引用对象的上下文,或者说是当前执行环境中的对象。在本文中...

    Javascript中this关键字指向问题的测试与详解

    this是Javascript中一个非常容易理解错...所以下面这篇文章主要给大家介绍了关于Javascript中this关键字指向问题的相关资料,文中通过测试的题目考验大家对this的熟悉程度,需要的朋友可以参考借鉴,下面来一起看看吧。

    深入理解JavaScript中的this关键字

    JavaScript中的`this`关键字是编程过程中经常会遇到的一个关键概念,尤其在面向对象编程中起着至关重要的作用。`this`的值取决于它被调用时的上下文,而不是定义时的位置,这使得它有时会显得有些复杂。在这个深入...

    跟我学习javascript的this关键字

    在JavaScript中,`this`关键字是一个经常被讨论的话题,因为它在不同的上下文中具有不同的含义。`this`关键字是动态绑定的,也称为运行期绑定,这意味着它会根据函数调用的方式和所在的上下文来改变其指向。这种动态...

    详解JavaScript中this关键字的用法_.docx

    在JavaScript中,`this`关键字是一个非常重要的概念,它指的是当前执行上下文中的对象。`this`的值取决于函数的调用方式,而不是定义方式。下面我们将详细探讨在不同场景下`this`的用法。 1. **全局作用域中调用...

    js原生态函数中使用jQuery中的 $(this)无效的解决方法.docx

    因此,在setTimeout函数中,this关键字指向global对象,而不是当前函数的执行环境。 三、解决方法 为了解决这个问题,我们可以使用一个变量来存储当前函数的this对象。例如: ``` $("ul li").hover(function(){ ...

    PPK 谈 JavaScript 的 this 关键字 [翻译]

    JavaScript的 this 总指向所运行的函数“自己本身”。也就是说,它是一种指向函数对象的方法。在页面中定义 doSomething() 函数,自己本身是指页面。也就是说,是指 JavaScript 的 window 对象(全局对象)。而 ...

    精通JavaScript的this关键字_.docx

    JavaScript中的`this`关键字是一个非常重要的概念,它在编程中起着至关重要的作用,尤其是在对象方法的上下文中。`this`关键字的用法类似于自然语言中的代词,它用来引用当前执行上下文的对象,帮助开发者避免命名...

    如何使用Javascript中的this关键字

    在JavaScript中,`this`关键字是一个非常重要的概念,它用于引用函数执行时的上下文对象。`this`的值取决于函数被调用的方式,而不是函数定义的位置。在不同的场景下,`this`的指向会发生变化,这使得它成为...

    图解JavaScript中的this关键字

    其中JavaScript 中的 this 关键字,就是一个比较容易混乱的概念,在不同的场景下,this会化身不同的对象。有一种观点认为,只有正确掌握了 JavaScript 中的 this 关键字,才算是迈入了 JavaScript 这门语言的门槛。...

    关于javascript中this关键字(翻译+自我理解)

    在传统的面向对象语言中,this关键字通常指代当前对象,但在JavaScript中,this的实际指向可能因执行环境或调用方式的不同而不同。 在JavaScript中,this关键字在函数中被使用时,其指向的是当前函数执行的上下文...

    JavaScript this关键字指向常用情况解析

    JavaScript中的`this`关键字是语言中的一个核心概念,它用于引用当前执行上下文中的对象。在不同的场景下,`this`的指向会有所不同,这使得理解`this`的关键点在于理解其上下文环境。以下是对四种常见`this`指向情况...

    深入解析JavaScript编程中的this关键字使用

    JavaScript中的`this`关键字是一个非常核心的概念,它用于在函数执行时引用当前上下文的对象。在JavaScript中,`this`的值取决于函数被调用的方式,而不是函数定义的位置。理解`this`的工作原理对于深入掌握...

    JavaScript中this指向.pdf

    首先,需要明确的是,在JavaScript中,this关键字的指向不是在编译期确定的,而是在运行期确定的。这与大多数主流的面向对象语言(比如Java和C#)不同,在那些语言中this关键字在编译期就已绑定到当前对象上。由于...

    Javascript 中 this指向

    this关键字是一个非常重要的语法点,它总是返回一个对象。 this 的指向规律有以下几条: 1. 在函数体中,非显式或隐式地简单调用函数时,在严格模式下,函数内的this会被绑定到undefined上,在非严格模式下则会被...

    javascript中this关键字详解

    在JavaScript中,`this`关键字是面向对象编程中的核心概念之一,它代表了函数的执行上下文,通常指向调用该函数的对象。理解`this`的含义和它在不同场合下的指向对于编写高效且符合预期的JavaScript代码至关重要。...

    JavaScript程序设计-javascript中this的指向问题.pdf

    在JavaScript编程中,`this`关键字是一个至关重要的概念,它表示当前上下文中的对象引用。在不同的场景下,`this`的指向会有所不同,这往往让开发者感到困惑。以下是关于`this`指向问题的详细解释: 一、普通函数...

Global site tag (gtag.js) - Google Analytics