zoukankan      html  css  js  c++  java
  • js中this的使用

    this一般指执行当前代码的所有者

    一个小李子:

                    

    <script type="text/javascript">
      var name = "Kevin Yang";
      function sayHi(){
        alert("你好,我的名字叫" + this.name);
      }
      var person = {};
      person.sayHello = sayHi;
      person.sayHello();
    script>

    sayHi() //Kevin Yang
    person.sayHello()  //name is undefined

    sayHi()函数中的this此时代表的window或者global ,window下有name属性
    person.sayHello()中的this代指的就是person对象了,person中无name属性


     

    本文例句三种指针使用错误情况:

    1.dom中的函数事件

    <script type="text/javascript">
      function sayHi(){
        alert("当前点击的元素是" + this.tagName);
      }  
    script>
    <input id="btnTest" type="button" value="点击我" onclick="sayHi()">


    会报错,因为行数中的this此时指代的是window而不是dom


    2.临时变量导致this丢失

    <script type="text/javascript">
      var Utility = {
        decode:function(str){
          return unescape(str);
        },
        getCookie:function(key){
          // ... 省略提取cookie字符串的代码
          var value = "i%27m%20a%20cookie";
          return this.decode(value);
        }
      };
      alert(Utility.getCookie("identity"))
    script>






    这种写法是可以的但是一下写法就是错误的
    <script type="text/javascript">
      function showUserIdentity(){
        // 保存getCookie函数到一个局部变量,因为下面会经常用到
        var getCookie = Utility.getCookie;
        alert(getCookie("identity"));
      }
      showUserIdentity();
    script>
    getCookie是一个临时变量,getCookie中的指针指代的是window,所以会报错
    <script type="text/javascript">
      function showUserIdentity(){
        // 保存getCookie函数到一个局部变量,因为下面会经常用到
        var getCookie = Utility.getCookie;
       alert(getCookie.call(Utility,"identity"));
        //alert(getCookie.apply(Utility,["identity"]));

    }
        showUserIdentity();

    script>

    3.传参时导致指针丢失 注意,Javascript里面都是值传递的,没有引用传递的概念
    <script type="text/javascript">
      var person = {
        name:"Kevin Yang",
        sayHi:function(){
          alert("你好,我是"+this.name);
        }
      }
      setTimeout(person.sayHi,5000);
    script>


    window.setTimeout中this指向window
      var boundFunc = person.sayHi.bind(person,person.sayHi);
      setTimeout(boundFunc,5000);
     
  • 相关阅读:
    bzoj 3035 二分答案+二分图最大匹配
    bzoj 1058 bst
    bzoj 1093 缩点+DP
    bzoj 1452 二维树状数组
    bzoj 1968 数学
    bzoj 1034 贪心
    牛客小白月赛12 I (tarjan求割边)
    Loj 103、10043 (KMP统计子串个数)
    poj 2356 (抽屉原理)
    hdu 1907 (尼姆博弈)
  • 原文地址:https://www.cnblogs.com/mttcug/p/8473936.html
Copyright © 2011-2022 走看看