zoukankan      html  css  js  c++  java
  • JS种this的四种用法

    记住以下四点:  

        1.没调用对象就指向全局对象
        2.有对象就指向调用对象
        3.用new构造就指向新对象
        4.通过 apply 或 call 或 bind 来改变 this 的所指。

    1.测试一:没调用对象就指向全局对象

        //1.第一种:1.在一般函数方法中使用 this 指代全局对象
        function test1() {    
            this.x = "这是全局变量"; //如果直接调用的话this代表window
            debugger
            alert(window.x);  
        }  
        test1(); // 1

    我们可以debugger查看断点:

     

     2.作为对象方法调用,this 指代上级对象

        //2.作为对象方法调用,this 指代上级对象
        function test() {  
            alert(this.x);
        }
        var o = {};
        o.x = 1;
        o.m = test;
        o.m(); // 1

    3.作为构造函数调用,this 指代new 出的对象(面向对象编程)

    <script>
        function test(){
        this.name="名字";
      }
      var o = new test();
      alert(o.name); // 名字
        //运行结果为1。为了表明这时this不是全局对象,我对代码做一些改变:
      var name= "全局姓名";
      alert(name); //全局姓名
    </script>

    4.apply 调用 ,apply方法作用是改变函数的调用对象,此方法的第一个参数为改变后调用这个函数的对象,this指代第一个参数

    var x = 0;
      function test(){
        alert(this.x);
      }
      var o={};
      o.x = 1;
      o.m = test;
      o.m.apply(); //0
    //apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。如果把最后一行代码修改为
    
      o.m.apply(o); //1
  • 相关阅读:
    git常用指令 github版本回退 reset
    三门问题 概率论
    如何高效的学习高等数学
    数据库6 关系代数(relational algebra) 函数依赖(functional dependency)
    数据库5 索引 动态哈希(Dynamic Hashing)
    数据库4 3层结构(Three Level Architecture) DBA DML DDL DCL DQL
    梦想开始的地方
    java String字符串转对象实体类
    java 生成图片验证码
    java 对象之间相同属性进行赋值
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/9362110.html
Copyright © 2011-2022 走看看