• 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);
     
  • 相关阅读:
    OC编程之道-创建对象之工厂方法
    OC编程之道-创建对象之单例模式
    OC编程之道-创建对象之原型模式
    OC编程之道-创建对象之生成器模式
    effective OC2.0 52阅读笔记(七 系统框架)
    effective OC2.0 52阅读笔记(六 块)+ Objective-C高级编程 (二 Blocks)
    effective OC2.0 52阅读笔记(五 内存管理)
    effective OC2.0 52阅读笔记(四 协议与分类)
    安装Sublime Text 3插件的方法
    cocos2d-x学习笔记
  • 原文地址:https://www.cnblogs.com/mttcug/p/8473936.html
Copyright © 2020-2023  润新知