zoukankan      html  css  js  c++  java
  • Javascript的关键字this详解

    在javascript中关键字this是一个很难掌握的概念。它在不同的情况下指代不同的对象。下面就来看看,在JavaScript中各种this的使用方法有什么不同之处?

    1、在HTML元素事件属性中inline方式使用this关键字:

    <div onclick="method(this)">element</div>

    这里的this代表触发onclick时间的Dom对象。

    2、在事件处理函数中使用this关键字:

    1 <div id="elmtDiv">element</div>
    2  <script language="javascript">
    3  var div = document.getElementById('elmtDiv');
    4  div.onclick = function()
    5  {
    6     // 在此使用this
    7  };
    8  </script>

    这里this指代的对象和上面一样。

    3、函数中的this

    函数中的this代表调用函数的对象。

    1 function print(message)
    2 {
    3      this.alert(message);
    4 }
    5 
    6 print("this is window");

    例如上面这个函数print的定义也可以写成。window.print = function(){}.调用print(),实际上是调用window对象上的方法print。所以print中的this代表window对象。还有类似的情况是在构造函数中定义的方法:

     1 function MyClass(name)
     2 {
     3     this.name = name;
     4     this.toString = function(){
     5         return this.name;
     6     }
     7 }
     8 
     9 var my = new MyClass('myclass');
    10 alert(my.toString());

    this指向的是调用此方法的对象my。

    4、在类的构造函数中使用this

    代码
    function JSClass()
    {
        
    var myName = 'jsclass';
        
    this.m_Name = 'JSClass';
    }

    JSClass.prototype.ToString 
    = function()
    {
        alert(myName 
    + '' + this.m_Name);
    };

    var jc = new JSClass();
    jc.ToString();

    这是JavaScript构造函数中对this的使用,这个和其它的OO语言中的情况非常的相识。但是这里要求成员属性和方法必须使用this关键字来引用,运行上面的程序会被告知myName未定义。有关构造函数的相关内容:Javascript(js)使用function定义构造函数有详细的介绍。

    5、为脚本引擎内部对象添加原形方法中的this关键字

    1 Function.prototype.GetName = function()
    2 {
    3     var fnName = this.toString(); 
    4     fnName = fnName.substr(0, fnName.indexOf('(')); 
    5     fnName = fnName.replace(/^function/''); 
    6     return fnName.replace(/(^\s+)|(\s+$)/g, '');
    7 }
    8 function foo(){}
    9 alert(foo.GetName());    

    这里的this指代的是被添加原形的类的实例。

    6、函数调用中的this

    在将函数作为一个对象的方法调用时,如:

    1 function print()
    2 {
    3     alert(this.toString());
    4 }
    5 
    6 print.apply('this is first argument');
    7 print.call('this is first argument');

    在Function.apply和Function.call中的第一个参数就是函数中this的对象。

    相关文章:Javascript对象原型prototype和继承

  • 相关阅读:
    Passing structures between C# and C/C++
    Leetcode 题目整理-6 Swap Nodes in Pairs & Remove Duplicates from Sorted Array
    Leetcode 题目整理-5 Valid Parentheses & Merge Two Sorted Lists
    链表
    Leetcode 题目整理-4 Longest Common Prefix & Remove Nth Node From End of List
    Leetcode 题目整理-3 Palindrome Number & Roman to Integer
    Leetcode 题目整理-2 Reverse Integer && String to Integer
    Leetcode 题目整理-1
    Leetcode 题目整理
    static静态变量在c++类中的应用实例
  • 原文地址:https://www.cnblogs.com/hyl8218/p/1658749.html
Copyright © 2011-2022 走看看